2

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
4

1 回答 1

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。

于 2013-08-08T21:46:10.850 回答