在Python 3中替换getstatusoutput

Ger*_*ncy 7 python python-3.x

由于自Python 2.6以来命令模块已弃用,我正在研究替换commands.getstatusoutput的最佳方法,它返回命令返回码和输出的元组.该模块是相当明显的,但是,它不提供getstatusoutput直接替换.在一个关于getstatusoutput的相关问题中讨论了一个潜在的解决方案- 但是,我并没有考虑重写原始函数(它至少有10个LOC),但是想知道是否有更简单的方法.

eca*_*mur 14

没有直接的替代品,因为commands.getstatusoutputAPI不好; 它结合了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)

如果你想stdoutstderr一起使用stderr=subprocess.STDOUT.