子进程checkoutput错误

use*_*396 5 python subprocess

我正在尝试使用下面的脚本检查check_output的用法并运行编译错误,我在哪里错了?

import os
import subprocess
from subprocess import check_output

#result = subprocess.check_output(['your_program.exe', 'arg1', 'arg2'])
SCRIPT_ROOT=subprocess.check_output(["pwd","shell=True"])
print SCRIPT_ROOT

def main ():
    pass

if __name__ == '__main__':
    main()

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    from subprocess import check_output
ImportError: cannot import name check_output
Run Code Online (Sandbox Code Playgroud)

fav*_*tti 10

check_output已经在Python 2.7中引入.如果您使用的是早期版本的python,那就不存在了.

替代方案是使用Popen.

output = subprocess.Popen(['pwd'], stdout=subprocess.PIPE).communicate()[0]
Run Code Online (Sandbox Code Playgroud)

这方面的证据可以在这里找到.

新函数:子进程模块的check_output()运行带有指定参数集的命令,并在命令运行时无错误地返回命令的输出作为字符串,否则引发CalledProcessError异常.

替补的演示.

import subprocess
cmd = subprocess.Popen(['pwd'], stdout=subprocess.PIPE)
output = cmd.communicate()[0]
print cmd.returncode
print output
Run Code Online (Sandbox Code Playgroud)

产量

> python p.py
/Users/vlazarenko/tests
Run Code Online (Sandbox Code Playgroud)

唯一真正的区别是Popen当命令返回非零代码时不会抛出异常.