好吧,我有两个脚本。 a.py打印b.py脚本的输出如下:
#a.py
from subprocess import Popen, PIPE, STDOUT
p = Popen(['/Users/damian/Desktop/b.py'], shell=False, stdout=PIPE, stderr=STDOUT)
while p.poll() is None:
print p.stdout.readline()
#b.py
#!/usr/bin/env python
import time
while 1:
print 'some output'
#time.sleep(1)
这很有效。但是, 当我取消注释time.sleep()行时,为什么我的脚本会死锁?
答案 0 :(得分:5)
您的输出可能已缓冲。为stdout添加.flush()以清除它:
import sys
import time
while 1:
print 'someoutput'
sys.stdout.flush()
time.sleep(1)
答案 1 :(得分:2)
如果您在-u
中调用a.py
(使输出无缓冲),则无需修改b.py
脚本:
import sys
from subprocess import Popen, PIPE, STDOUT
p = Popen([sys.executable, '-u', '/Users/damian/Desktop/b.py'],
stdout=PIPE, stderr=STDOUT, close_fds=True)
for line in iter(p.stdout.readline, ''):
print line,
p.stdout.close()
if p.wait() != 0:
raise RuntimeError("%r failed, exit status: %d" % (cmd, p.returncode))