由于自Python 2.6以来命令模块已弃用,我正在研究替换commands.getstatusoutput的最佳方法,它返回命令返回码和输出的元组.该子模块是相当明显的,但是,它不提供getstatusoutput直接替换.在一个关于getstatusoutput的相关问题中讨论了一个潜在的解决方案- 但是,我并没有考虑重写原始函数(它至少有10个LOC),但是想知道是否有更简单的方法.
eca*_*mur 14
没有直接的替代品,因为commands.getstatusoutput
API不好; 它结合了stderr和stdout,但没有提供单独检索它们的选项.
您应该使用的便利API是subprocess.check_output
,如果命令失败,它将抛出异常.
否则,它确实显得有些缺陷,subprocess
它不提供在单个调用中检索输出和状态的方法,但它很容易解决; 这是关联问题的答案应该是:
def get_status_output(*args, **kwargs):
p = subprocess.Popen(*args, **kwargs)
stdout, stderr = p.communicate()
return p.returncode, stdout, stderr
Run Code Online (Sandbox Code Playgroud)
如果你想stdout
和stderr
一起使用stderr=subprocess.STDOUT
.
getstatusoutput返回(来自python 3.1):)参见:http://docs.python.org/3.3/library/subprocess.html#legacy-shell-invocation-functions
归档时间: |
|
查看次数: |
6630 次 |
最近记录: |