3

我只想做这样的事情:

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

但我似乎无法做到。我可以获取标准输出、错误代码(通过.call)或者两者都可以,但需要使用某种管道。我在这里想念什么?关于这个(对我来说)明显的功能的文档非常稀少。对不起,如果这是一个简单的问题。

4

3 回答 3

4

我认为你想要 stdout、sterr 和返回码?在这种情况下,您可以这样做:

import subprocess
PIPE = subprocess.PIPE
proc = subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE)
output, err = proc.communicate()
errcode = proc.returncode
于 2013-08-23T14:10:05.227 回答
2

我最终选择了这个。谢谢你的帮助!

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)
于 2013-08-23T17:59:55.230 回答
1

subprocess.check_output返回一个值(输出字符串),并且不返回退出状态。使用以下表格:

import subprocess
try:
    out = subprocess.check_output('cat foo.txt', shell=True)
    print out
except subprocess.CalledProcessError, e:
    print e
于 2013-08-23T14:11:40.183 回答