使用subprocess.call方法

时间:2013-08-08 21:41:36

标签: python

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

1 个答案:

答案 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。