Unix输入/输出缓冲:Perl与Python

时间:2017-01-14 19:48:28

标签: python perl unix

我一直在阅读SO讨论如何输出到终端的线路缓冲,输出到管道或文件等通常是“块缓冲”。我在OSX上尝试以下两个管道,其目的是为传入行添加时间戳:

while [ 1 ] ; do echo $RANDOM && sleep .5 ; done | ~/bin/prepend_ts_python 

while [ 1 ] ; do echo $RANDOM && sleep .5 ; done | ~/bin/prepend_ts_perl

Perl程序是(我对Perl知之甚少):

#!/usr/bin/perl

while ( <> ) {
    print scalar(localtime()), " ";
    print;
}

Python程序(显然没有预先设置时间戳)是:

#!/usr/bin/python

import sys

for line in sys.stdin:
    print("foo")

使用Perl版本的管道会根据需要立即打印输出,而Python会间歇性地输出。

我的印象是,正在进行的任何缓冲都是由while / echo循环确定的,因此人们建议使用unbuffer命令管道的开始。

Perl是否有某种方法可以刷新STDIN?我认为它不会在管道中“倒退”。他们为什么不同?

0 个答案:

没有答案