加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 06:14:40 所属栏目:大数据 来源:网络整理
导读:我需要从我的Perl脚本执行一个命令,这需要一段时间(1-2个小时).我希望能够看到命令的输出,以便我的脚本可以检查一切正常,但是由于需要这么长时间,我希望用户在运行时看到命令输出. 我尝试过的: 反引号 – 只能在命令完成时获得输出 system – 只能在命令完
我需要从我的Perl脚本执行一个命令,这需要一段时间(1-2个小时).我希望能够看到命令的输出,以便我的脚本可以检查一切正常,但是由于需要这么长时间,我希望用户在运行时看到命令输出.

我尝试过的:

>反引号 – 只能在命令完成时获得输出
> system – 只能在命令完成时获得输出
> open – 几乎完美 – 但命令输出是缓冲的,这意味着用户很长时间都看不到更新.互联网上充满了设置$|的建议= 1但显然这仅影响输入缓冲并且不起作用
>管道到三通 – 打开类似的结果 – ‘tee’似乎只是稍后打印
>重定向输出和使用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应该在命令中禁用输出缓冲.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读