【发布时间】:2011-01-06 04:09:03
【问题描述】:
我正在尝试从subprocess.Popen 呼叫中获取stdout,尽管我很容易通过以下方式实现:
cmd = subprocess.Popen('ls -l', shell=True, stdout=PIPE)
for line in cmd.stdout.readlines():
print line
我想“实时”获取stdout。使用上面的方法,PIPE正在等待抓取所有stdout然后返回。
因此,出于记录目的,这不符合我的要求(例如,当它发生时“查看”正在发生的事情)。
有没有办法在运行时逐行获取stdout?或者这是subprocess 的限制(必须等到PIPE 关闭)。
编辑
如果我将readlines() 切换为readline(),我只会得到stdout 的最后一行(不理想):
In [75]: cmd = Popen('ls -l', shell=True, stdout=PIPE)
In [76]: for i in cmd.stdout.readline(): print i
....:
t
o
t
a
l
1
0
4
【问题讨论】:
-
使用
readline(),您将得到第一行,而不是最后一行。您必须反复调用readline()才能获取每一行。
标签: python logging subprocess pipe popen