如何解决实时子进程。通过stdout和PIPE打开?

您的解释器正在缓冲。在打印语句后,添加对sys.stdout.flush()的调用

解决方法

我试图stdoutsubprocess.Popen通话中抢夺,尽管我可以通过以下方式轻松实现此目标:

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',stdout=PIPE)
In [76]: for i in cmd.stdout.readline(): print i
....: 
t
o
t
a
l

1
0
4