在管道输出到文件时使用行缓冲

fif*_*tra 4 perl buffer

我有一个打印到 的 perl 程序,stdout然后我将其输入到一个文件中,如下所示:

./skript.pl > file.txt 2>&1
Run Code Online (Sandbox Code Playgroud)

这使得该 skript 缓冲区的输出。但是,我希望能够看到 skript 目前正在处理什么,所以我试图找到一种方法来在此设置中启用行缓冲,以便在\n出现时立即打印输出。(如果我只是打印到终端,这是正常行为。)

我需要一个无需在 CentOS 上安装任何东西即可使用的解决方案。

更改 perlscript 中的内容是一种选择。我已经尝试过了$|,但这比我想要的要多:cat file.txt如果当前行的末尾尚未打印,它会弄乱输出。

Lam*_*ert 6

在您的脚本中,您可以使用:

STDOUT->flush;
Run Code Online (Sandbox Code Playgroud)

刷新输出缓冲区。

您甚至可以STDOUT->autoflush(1);全局设置。

要刷新换行符,请仅尝试:

STDOUT->autoflush(0);
open STDOUT, ">/tmp/script.out"
.
.
close STDOUT;
Run Code Online (Sandbox Code Playgroud)