第一行Python脚本的子进程输出不能立即使用

时间:2015-01-29 01:28:05

标签: python

我想从另一个python脚本执行python脚本。我正在使用:

hello.py

#! /usr/bin/env python
from time import sleep
print 'hello'
sleep(10)
print 'world!'

host.py

#! usr/bin/env python
import shlex
from subprocess import PIPE, STDOUT, Popen

cmd = 'python hello.py'
p = Popen(shlex.split(cmd), stdout=PIPE, stderr=STDOUT)
for line in iter(p.stdout.readline, b''):
    print line.rstrip()

但是,在10秒延迟后,hello不会立即打印world,而是hello会延迟10秒。

这种延迟的原因是什么?如何避免?

1 个答案:

答案 0 :(得分:1)

只有当stdout直接指向终端时,行缓冲通常是隐含的 - 当它运行到管道时,意味着

将您已经看到的行为与以下行为进行比较:

print 'hello'
sys.stdout.flush() ## force the buffer the flush here
sleep(10)
print 'world!'