在线文档指出 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
没有发出警告。在三种可能的情况中
- 预期的行为是文档和标准库对弃用的内容有不同的想法;
- 文档中有一个错误,并且 os.popen 并没有真正被弃用;
- 标准库中有错误,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 中并没有被弃用,毕竟。