我想从另一个python脚本执行python脚本。我正在使用:
#! /usr/bin/env python
from time import sleep
print 'hello'
sleep(10)
print 'world!'
#! 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秒。
这种延迟的原因是什么?如何避免?
答案 0 :(得分:1)
只有当stdout直接指向终端时,行缓冲通常是隐含的 - 当它运行到管道时,意味着不。
将您已经看到的行为与以下行为进行比较:
print 'hello'
sys.stdout.flush() ## force the buffer the flush here
sleep(10)
print 'world!'