7

在线文档指出 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 上的回复。

附录:感谢下面的 cobbal ,事实证明 os.popen 在 Python 3.1 中并没有被弃用,毕竟。

4

4 回答 4

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
于 2009-07-08T14:28:01.190 回答
4

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

于 2009-07-08T13:59:47.670 回答
3

与此同时,我在 Python 问题跟踪器上开了一张票。我会一直保持这个问题,直到票被关闭。

于 2009-08-03T15:45:21.420 回答
0

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

于 2009-11-26T02:47:37.660 回答