Perl
在管道輸出到文件時使用行緩衝
我有一個列印到的 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;