[英]Perl execute command, capture and display output
我需要从我的Perl脚本执行命令,这将需要一段时间(1-2小时)。 我希望能够看到命令的输出,以便我的脚本可以检查一切正常,但是由于需要花费很长时间,因此我希望用户也可以在命令运行时看到命令的输出。
我试过的
backticks
-仅在命令完成时才能获得输出 system
-仅在命令完成时才能获得输出 open
-几乎完美-但命令输出已缓冲,这意味着用户很长时间都不会看到更新。 互联网上充斥着设置$| = 1
的建议 $| = 1
但显然这仅会影响输入缓冲并且不起作用 tee
到tee
-与open
类似的结果-似乎仅在以后打印“发球台” Proc::Background
和File::Tail
几乎再完美不过,但是想不出一种优雅的方式来停止打印循环 希望有一个建议!
编辑:我已经接受了巴尔马斯的答案。 我相信这是可行的,因为Expect.pm使用伪终端。 只是对于其他在将来看这个问题的人来说,这就是我的实现方式:
my $process = Expect->spawn($command, @params) or die "Cannot spawn $command: $!\n";
while ($process->expect(undef))
{
print $process->before();
}
使用Expect.pm
应该在命令中禁用输出缓冲。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.