如何解决实时子进程通过stdout和PIPE打开
您的解释器正在缓冲。在打印语句后,添加对sys.stdout.flush()的调用。
解决方法
我试图stdout
从subprocess.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。