从 Perl 调用命令,需要查看输出

Posted

技术标签:

【中文标题】从 Perl 调用命令,需要查看输出【英文标题】:Calling command from Perl, need to see output 【发布时间】:2010-12-14 20:08:23 【问题描述】:

我需要从 perl 中调用一些 shell 命令。这些命令需要相当长的时间才能完成,所以我想在等待完成时查看它们的输出。

system 函数在完成之前不会给我任何输出。

exec 函数给出输出;但是,它从那时起退出了 perl 脚本,这不是我想要的。

我在 Windows 上。有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

Backticks,或qx 命令,在单独的进程中运行命令并返回输出:

print `$command`;
print qx($command);

如果您希望查看中间输出,请使用open 创建命令输出流的句柄并从中读取。

open my $cmd_fh, "$command |";   # <---  | at end means to make command 
                                 #         output available to the handle
while (<$cmd_fh>) 
    print "A line of output from the command is: $_";

close $cmd_fh;

【讨论】:

@Nathan - 可能,但对于外部命令来说,具有良好的缓冲行为更为重要——要么不缓冲其输出,要么以足够快的速度产生输出,以至于缓冲无关紧要。 ++ 用于反引号和管道打开 - 我唯一的挑剔是没有提到该技术的 3+ args 版本,这应该更安全:打开我的 $cmd_fh, '-| ',$命令;另外,链接:perldoc.perl.org/perlopentut.html#Pipe-Opens

以上是关于从 Perl 调用命令,需要查看输出的主要内容,如果未能解决你的问题,请参考以下文章

我的 perl 脚本如何调用和执行并后处理它

具有多个参数的 Perl 系统命令输出到文件

Perl - 需要反复调用系统('diff')

Perl - 从外部进程直接输出到标准输出(避免缓冲)

捕获 Perl 的 'system()' 的输出

如何从命令行测试Perl CGI脚本的文件上传?