似乎我在检索我在perl脚本中执行的另一个应用程序的输出时遇到问题。
我试过用
# Option 1:
open( FH, "program -paramaeters |" ) or warn("$!");
while ( my $line = <FH> ) { print $line }
# Option 2: IPC::Run3's
run3( \@cmd, \undef, \$output );
# Option 3:
my $output = system("program");
# Option 4:
my $output = `program`;
# Option 5:
my $output = exec("program");
并且以上都没有捕获相关程序的确切字符串输出。
我只是想知道是否有比我之前列出的更好的方法。
编辑:
这适用于Windows系统
答案 0 :(得分:2)
使用选项1,但像这样添加2>&1
:
open( FH, "program -paramaeters 2>&1 |" ) or warn("$!");
while ( my $line = <FH> ) { print $line }
这将捕获程序的stderr输出,就像stdout一样。
答案 1 :(得分:0)
基于您自己的选择的可能解决方案。
1 :(由Alcanzar提供,改进使用词法变量)将检索STDOUT&amp; STDERR合并在一起,逐行阅读。
open( my $FH, "program -paramaeters 2>&1 |" ) or warn("$!");
while ( my $line = <$FH> ) { print $line }
2a:检索STDOUT&amp; STDERR作为独立字符串。
run3( \@cmd, \undef, \$output, \$error );
2b:检索STDOUT&amp; STDERR作为独立的流,通过IO :: Pipe对象稍后读取,也许是逐行读取。
run3( \@cmd, \undef, $output, $error );
3:system()
返回退出代码,而不是输出。 不是你想要的
4:很像选项#1。输出合并为一个字符串。
my $output = `program 2>&1`;
5:exec()
:终止此程序并运行指定的程序。退出状态将返回到该程序的父级... 不是您想要的