我只想做这样的事情:
>>bar, err_value = subprocess.check_output("cat foo.txt", shell=True)
>>print bar
>>Hello, world.
>>print err_value
>>0
但我似乎无法做到。我可以获取标准输出、错误代码(通过.call)或者两者都可以,但需要使用某种管道。我在这里想念什么?关于这个(对我来说)明显的功能的文档非常稀少。对不起,如果这是一个简单的问题。
我只想做这样的事情:
>>bar, err_value = subprocess.check_output("cat foo.txt", shell=True)
>>print bar
>>Hello, world.
>>print err_value
>>0
但我似乎无法做到。我可以获取标准输出、错误代码(通过.call)或者两者都可以,但需要使用某种管道。我在这里想念什么?关于这个(对我来说)明显的功能的文档非常稀少。对不起,如果这是一个简单的问题。
我认为你想要 stdout、sterr 和返回码?在这种情况下,您可以这样做:
import subprocess
PIPE = subprocess.PIPE
proc = subprocess.Popen(cmd, stdout=PIPE, stderr=PIPE)
output, err = proc.communicate()
errcode = proc.returncode
我最终选择了这个。谢谢你的帮助!
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)
subprocess.check_output返回一个值(输出字符串),并且不返回退出状态。使用以下表格:
import subprocess
try:
out = subprocess.check_output('cat foo.txt', shell=True)
print out
except subprocess.CalledProcessError, e:
print e