我正在尝试编写一个执行RKHunter扫描的Perl CGI。在执行comman时,我想显示一些东西来表示进度而不是实际输出,它将被重定向到另一个文件。到目前为止的代码是:
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!!";
如何以这样的方式修复此问题:将详细输出重定向到文件,并且屏幕上只有....
稳定进展?
答案 0 :(得分:2)
$|=1;
在脚本的开头。 这会打开autoflush,因此每次打印都会打印,而不是在刷新缓冲区之前等待换行。
另见:http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles