我只想做这样的事情:
>>bar, err_value = subprocess.check_output("cat foo.txt", shell=True)
>>print bar
>>Hello, world.
>>print err_value
>>0
但我似乎无法做到。我可以得到stdout,错误代码(通过.call)或者两者都需要使用某种管道。我在这里错过了什么?关于这个(对我而言)显而易见的功能,文档非常稀少。对不起,如果这是一个简单的问题。
答案 0 :(得分:4)
我认为你想要stdout,sterr和返回代码?在这种情况下,你可以这样做:
import subprocess
PIPE = subprocess.PIPE
proc = subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE)
output, err = proc.communicate()
errcode = proc.returncode
答案 1 :(得分:1)
subprocess.check_output返回一个值(输出字符串),并且不返回退出状态。使用以下表格:
import subprocess
try:
out = subprocess.check_output('cat foo.txt', shell=True)
print out
except subprocess.CalledProcessError, e:
print e
答案 2 :(得分:1)
我最终还是坚持了下去。谢谢你的帮助!
def subprocess_output_and_error_code(cmd, shell=True):
import subprocess
PIPE=subprocess.PIPE
STDOUT=subprocess.STDOUT
proc = subprocess.Popen(cmd, stdout=PIPE, stderr=STDOUT, shell=shell)
stdout, stderr = proc.communicate()
err_code = proc.returncode
return stdout, int(err_code)