我需要从我的Perl脚本执行命令,这需要一段时间(1-2小时)。我希望能够看到命令的输出,以便我的脚本可以检查一切正常,但由于需要这么长时间,我希望用户在运行时看到命令输出。< / p>
我尝试了什么:
backticks
- 只能在命令完成时获得输出system
- 只能在命令完成时获得输出open
- 几乎完美 - 但命令输出是缓冲的,这意味着用户很长时间都看不到更新。互联网上充满了设置$| = 1
的建议,但显然这只会影响输入缓冲并且不起作用tee
- 与open
相似的结果 - 'tee'似乎只是稍后打印Proc::Background
和File::Tail
- 几乎完美,但想不出优雅的方法来停止打印循环很想有个建议!
my $process = Expect->spawn($command, @params) or die "Cannot spawn $command: $!\n";
while ($process->expect(undef))
{
print $process->before();
}
答案 0 :(得分:2)
使用Expect.pm
应禁用命令中的输出缓冲。