摘要:
使用$| = 1
或換行,"\n"
添加到打印。
說明:
這不是打印到終端的原因是因爲Perl正在緩衝對效率的輸出。一旦打印緩衝區被填滿,它將被刷新並且輸出將出現在您的終端中。您可能希望強制沖洗緩衝區,因爲根據您的輸出長度,您可能會等待相當長的時間!
主要有兩種方法來刷新緩衝區:
1)當你打印到你的終端,那麼你的文件句柄是最有可能STDOUT
。把手附連到終端的任何文件都默認在行緩衝模式,我們可以刷新緩衝區,並通過添加一個新行字符到您print
語句強制輸出:
while (1) {
print "DEBUG INFO\n";
...
sleep $TIMEOUT;
}
2)第二種方法是使用$|
,當設置爲非零時,使當前文件句柄(默認爲STDOUT
或最後爲select
ed)熱並立即強制刷新緩衝區。因此,以下也將迫使調試信息打印:
$| = 1;
while (1) {
print "DEBUG INFO";
...
sleep $TIMEOUT;
}
如果使用語法,如這是混亂的,那麼你可能要考慮:
use IO::Handle;
STDOUT->autoflush(1);
while (1) {
print "DEBUG INFO";
...
sleep $TIMEOUT;
}
在許多代碼示例,其中直接沖洗的緩衝區是必需的,你可能會看到$|++
用於使文件句柄變熱並立即刷新緩衝區,並且--$|
使文件句柄冷卻並關閉自動刷新。看到這兩個答案,瞭解更多詳情:
如果您有興趣學習更多關於Perl的緩衝區,那麼我建議閱讀Suffering from Buffering,這給了偉大的洞察爲什麼我們有緩衝並解釋如何打開和關閉它。
守護進程的STDOUT通常有目的地指向終端以外的某個地方。你是如何守護程序的? – ikegami