我正在尝试从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()
函数来获取每一行。 - Albert