os.popen在Python 2.6中是否真的被弃用了?

时间:2009-07-08 13:57:19

标签: python deprecated std

联机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应该发出警告;
  4. 哪一个是正确的?

    有关背景信息,请参阅我正在使用的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并没有被弃用。

4 个答案:

答案 0 :(得分:5)

这是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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

与此同时,我在Python问题跟踪器上打开了ticket。在门票关闭之前,我会保持这个问题。

答案 3 :(得分:0)

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