我想将包含 stderr 的命令的输出读入 HANDLE:

open(HANDLE, "-|", $cmd, @args);

但是上面的命令只是读取标准输入?

我怎样才能读取标准错误?

最佳答案

IPC::Run 模块提供了一个 run 函数,其工作方式类似于增压 system 。它允许我们收集 STDERR 和 STDOUT 组合的输出:

run [$cmd, @args], '&>', \my $output;

之后, $output 变量将组合输出保存为字符串。

例子:
use IPC::Run qw/ run /;
run ['perl', '-E say "stdout"; say STDERR "stderr"'], '&>', \my $output;
print uc $output;

输出:
STDOUT
STDERR

我不知道如何使用文件句柄代替标量引用,以便可以在 while(<$fh>) 循环中正常读取输出。

关于perl - 打开( handle , "-|",$cmd,@args): how to read stderr?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17109089/

10-15 04:08