2013-12-11 147 views
0

我正在嘗試編寫執行RKHunter掃描的Perl CGI。在執行comman時,我想顯示一些內容來指示進度,而不是將要重定向到另一個文件的實際輸出。到目前爲止的代碼是:Perl - 在執行系統()命令期間顯示進度

open(my $quik_rk, '-|', 'rkhunter', '--enable', '"known_rkts"') or print "ERROR RUNNING QUICK ROOTKIT CHECK!!"; 
     while(<$quik_rk>) 
     {  print "."; 
     }  
     print "\n"; 
     close($quik_rk); 

這不顯示任何輸出,我在等待執行完成時顯示一個空白屏幕。所有的點都打印到屏幕一起,而不是一個接一個,而且,當我用下面的重定向,該命令不執行都:

open(my $quik_rk, '-|', 'rkhunter', '--enable', '"known_rkts"', '>>', '/path/to/file') or print "ERROR RUNNING QUICK ROOTKIT CHECK!!"; 

我怎樣才能解決這個問題這樣一個細節輸出重定向到一個文件,只有一個....在屏幕上穩步前進?

+1

http://stackoverflow.com/q/1645308/1030675 – choroba

回答

2
$|=1; 

在腳本的開頭。 這將打開autoflush,因此每個打印實際上都會打印出來,而不是在刷新緩衝區之前等待換行符。

另見:http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles

+0

所以我需要執行,使其恢復正常的行爲後關閉自動沖洗? – rahuL

+0

每次打印命令後都會繼續刷新。所以除非你真的想要在實際上在同一個腳本中打印之前緩衝沒有換行符的幾個打印命令,否則你可能不會注意到它正在被打印。但是當然你可以立即用'$ | = 0;'將它關閉。然後它將返回到僅在遇到換行符時打印。 – DeVadder

+0

好的非常感謝:) – rahuL