[英]How to get both the output and return code with subprocess?
我正在使用subprocess
模块来执行我的 C 程序,最后我想获得程序返回的返回码和输出。 我试过这个:
result = subprocess.check_output(['src/main', '-n {0}'.format(n)], universal_newlines=True)
以上捕获了程序的输出,如果返回码非零,它只会引发错误。 关键是我不想在非零错误代码上引发错误,而是想在if
语句中使用它,如果返回代码非零,我想重新运行该过程。
现在,如果我将其更改为run
,并调用为:
result = subprocess.run(['src/main', '-n {0}'.format(n)])
然后,我可以执行result.returncode
来获取返回码,但是当我执行result.stdout
,它会打印None
。 有没有办法同时获得返回码和实际输出?
为了使用subprocess.run()
捕获输出,您需要传递stdout=subprocess.PIPE
。 如果您还想捕获 stderr,还可以通过stderr=subprocess.PIPE
(或stderr=subprocess.STDOUT
使 stderr 与result.stdout
属性中的 stdout 合并)。 例如:
result = subprocess.run(['src/main', '-n {0}'.format(n)], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
或者,如果您使用的是 Python 3.7 或更高版本:
result = subprocess.run(['src/main', '-n {0}'.format(n)], capture_output=True)
您可能还想设置universal_newlines=True
以将stdout 作为字符串而不是字节获取。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.