Perl

在管道輸出到文件時使用行緩衝

  • December 17, 2015

我有一個列印到的 perl 程序,stdout然後我將其通過管道傳輸到一個文件中,如下所示:

./skript.pl > file.txt 2>&1

這使得該腳本緩衝區的輸出。但是,我希望能夠看到腳本目前正在做什麼,所以我試圖找到一種在此設置中啟用行緩衝的方法,以便在\n出現時立即列印輸出。(如果我只是列印到終端,這是正常行為。)

我需要一個無需在 CentOS 上安裝任何東西即可使用的解決方案。

更改 perlscript 中的內容是一種選擇。我已經嘗試過$|,但這比我想要的要多:cat file.txt如果目前行的末尾尚未列印,它會弄亂輸出。

您可能希望使用stdbuf執行腳本,它有一個用於行緩衝的選項:

stdbuf --output=L --error=L command

優點是您不必修改程式碼。您還可以stdbuf與沒有可用原始碼的實用程序一起使用,或者在建構此類實用程序時很棘手。

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

STDOUT->flush;

刷新輸出緩衝區。

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

要刷新換行符,請嘗試:

STDOUT->autoflush(0);
open STDOUT, ">/tmp/script.out"
.
.
close STDOUT;

引用自:https://unix.stackexchange.com/questions/249678