我想从子进程中获取stdout和stderr

时间:2013-08-23 14:06:18

标签: python subprocess stdout

我只想做这样的事情:

>>bar, err_value = subprocess.check_output("cat foo.txt", shell=True)
>>print bar
>>Hello, world.
>>print err_value
>>0

但我似乎无法做到。我可以得到stdout,错误代码(通过.call)或者两者都需要使用某种管道。我在这里错过了什么?关于这个(对我而言)显而易见的功能,文档非常稀少。对不起,如果这是一个简单的问题。

3 个答案:

答案 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)