Python版本:'2.6.5(r265:79063,2012年10月1日,22:07:21)\ n [GCC 4.4.3]'
我有这个:
>>> ss = subprocess.call("ls -z", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
如何立即收到错误消息?
这不起作用:
>>> for i in subprocess.PIPE:
... print i
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
答案 0 :(得分:2)
这些选项组合效果不佳。 Communicate()将读取stdout,stderr并等待程序终止。
proc = subprocess.Popen("ls -z", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
assert proc.returncode == 0, 'i am sad'
print out
print err
如果你想在程序运行时逐行读取stdout,你可以创建自己的线程来管理stderr或管道stderr到stdout。