我有一个打印到 的 perl 程序stdout
,然后将其通过管道传输到一个文件中,如下所示:
./skript.pl > file.txt 2>&1
这使得该脚本缓冲区的输出。但是,我希望能够看到脚本目前正在做什么,因此我试图找到一种在此设置中启用行缓冲的方法,以便在出现时立即打印输出\n
。 (如果我只是打印到终端,这是正常行为。)
我需要一个无需在 CentOS 上安装任何东西即可使用的解决方案。
更改 perlscript 内的内容是一种选择。我已经尝试过了,但这比我想要的要多:如果尚未打印当前行的末尾,$|
它会弄乱输出。cat file.txt
答案1
在您的脚本中您可以使用:
STDOUT->flush;
刷新输出缓冲区。
您甚至可以STDOUT->autoflush(1);
全局设置。
要刷新换行符,只需尝试:
STDOUT->autoflush(0);
open STDOUT, ">/tmp/script.out"
.
.
close STDOUT;
答案2
您可能想运行您的脚本标准缓冲区,它有一个行缓冲选项:
stdbuf --output=L --error=L command
优点是不用修改代码。您还可以使用stdbuf
没有可用源代码的实用程序,或者当构建此类实用程序很棘手时。
答案3
通过 stderr 重定向怎么样?默认情况下它应该是无缓冲的:
./skript.pl 2> file.txt 1>&2