如何从Python中获取管道输入并立即输出?

时间:2015-04-03 01:27:43

标签: python pipe stdout stdin io-redirection

我想编写一个程序,可以接受输入管道,操作它,并立即输出。似乎无论我尝试了多少东西(使用stdout.write而不是print,明确刷新stdout,将stdin设置为无缓冲),输出似乎会延迟直到输入程序关闭。

示例输入脚本:

import sys
import time

sys.stdout.write('1\n')
sys.stdout.flush()

time.sleep(3)

sys.stdout.write('2\n')
sys.stdout.flush()

示例输出脚本:

import sys
import time

for line in sys.stdin:

    print time.time()

    sys.stdout.write(line)
    sys.stdout.flush()

如果我这样做:

python input.py | python output.py

我得到这样的东西:

1428023794.99
1
1428023794.99
2

显然,这些线路正在同时进入第二个节目。我也尝试使用-u标志运行第二个python脚本到unbuffer stdin,但得到相同的输出。

如何让我的程序从stdin拉出文本立即输出文本?

0 个答案:

没有答案