【问题标题】:Is os.popen really deprecated in Python 2.6?os.popen 在 Python 2.6 中真的被弃用了吗?
【发布时间】:2009-07-08 13:57:19
【问题描述】:

在线documentation 声明 os.popen 现在已弃用。所有其他不推荐使用的函数都会适当地引发 DeprecationWarning。例如:

>>> import os
>>> [c.close() for c in os.popen2('ps h -eo pid:1,command')]
__main__:1: DeprecationWarning: os.popen2 is deprecated.  Use the subprocess module.
[None, None]

另一方面,函数 os.popen 默默地完成:

>>>len(list(os.popen('ps h -eo pid:1,command')))
202

没有发出警告。在三种可能的情况中

  1. 预期的行为是文档和标准库对弃用的内容有不同的想法;
  2. 文档中有错误,os.popen 并未真正被弃用;
  3. 标准库中存在错误,os.popen 应发出警告;

哪个是正确的?

有关背景信息,这是我正在使用的 Python:

>>> import sys
>>> print sys.version
2.6.2 (r262:71600, May 12 2009, 10:57:01) 
[GCC 4.2.4 (Ubuntu 4.2.4-1ubuntu3)]

os.popen 的参数取自 Stack Overflow 上的 reply of mine

附录:感谢 cobbal below,毕竟 Python 3.1 中并没有弃用 os.popen。

【问题讨论】:

  • 有什么关系?为什么你需要知道“正确”的原因?它声称已弃用,而 subprocess.Popen 是替代品。你还需要知道什么?知道它如何改进你的代码?
  • 我猜实际上很多很多代码都依赖于这个函数。
  • 亲爱的 S.Lott,我知道对于非英语母语的人来说,总是很清楚并不总是那么容易,所以如果我写的东西不容易理解,我深表歉意。但是请您,非常请您至少努力阅读我的问题吗?我不是问什么原因。我在问谁或出了什么问题:文档、发布的 Python 代码,或者我自己期望两者是一致的。
  • 亲爱的 S. Lott,让我尝试不同的方法。你为什么说 os.popen 已被弃用?我可以声称文档是错误的。实际上只弃用了 popen2、popen3 等,而直接从 posix.popen 提升的 os.popen 则没有。请比较svn.python.org/view/python/tags/r262/Lib/os.py中的第44行和第669行
  • 亲爱的 S.Lott,根据常见问题解答,问题不必围绕损坏或不工作的代码。如果您不明白为什么某个功能是否被弃用对软件的可维护性很重要,我认为适当的做法是让您提出一个单独的问题,我很乐意提供答案。

标签: python deprecated std


【解决方案1】:

这里是PEP

Deprecated modules and functions in the standard library:

    - buildtools
    - cfmfile
    - commands.getstatus()
    - macostools.touched()
    - md5
    - MimeWriter
    - mimify
    - popen2, os.popen[234]()
    - posixfile
    - sets
    - sha

【讨论】:

    【解决方案2】:

    我能想到的一件事是 os.popen 存在于 python3 中,而 os.popen2 不存在。因此,一种比另一种“更被弃用”,并计划尽快从语言中删除。

    【讨论】:

    【解决方案3】:

    与此同时,我在 Python 问题跟踪器上打开了ticket。在票证关闭之前,我会一直回答这个问题。

    【讨论】:

    • 恭喜您提出了如此敏锐的问题,并通过正式渠道帮助将这种差异推向了终结。到目前为止,popen 似乎会留下来并获取文档。耶!
    【解决方案4】:

    commands.getstatusoutput 仍然根据 2.6.4 文档使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      相关资源
      最近更新 更多