繁体   English   中英

Perl执行命令,捕获并显示输出

[英]Perl execute command, capture and display output

我需要从我的Perl脚本执行命令,这将需要一段时间(1-2小时)。 我希望能够看到命令的输出,以便我的脚本可以检查一切正常,但是由于需要花费很长时间,因此我希望用户也可以在命令运行时看到命令的输出。

我试过的

  • backticks -仅在命令完成时才能获得输出
  • system -仅在命令完成时才能获得输出
  • open -几乎完美-但命令输出已缓冲,这意味着用户很长时间都不会看到更新。 互联网上充斥着设置$| = 1的建议 $| = 1但显然这仅会影响输入缓冲并且不起作用
  • teetee -与open类似的结果-似乎仅在以后打印“发球台”
  • 重定向输出并使用Proc::BackgroundFile::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM