Perl - 在执行system()命令期间显示进度

时间:2013-12-11 09:20:26

标签: perl cgi

我正在尝试编写一个执行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!!";

如何以这样的方式修复此问题:将详细输出重定向到文件,并且屏幕上只有....稳定进展?

1 个答案:

答案 0 :(得分:2)

$|=1;

在脚本的开头。 这会打开autoflush,因此每次打印都会打印,而不是在刷新缓冲区之前等待换行。

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

相关问题