open(HANDLE,“ - |”,$ cmd,@ args):如何阅读stderr?

时间:2013-06-14 13:00:59

标签: perl file-io stderr

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

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

但上面的命令只是读取stdin?

我怎样才能阅读stderr?

3 个答案:

答案 0 :(得分:2)

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>)循环中正常读取输出。

答案 1 :(得分:0)

您将要查看启动进程的IPC::Open3,并提供单独的文件句柄以写入子进程,并读取子进程的STDOUT和STDERR。

答案 2 :(得分:-1)

我在perl代码中使用Bash重定向:

open (CMDOUT, "df -h 2>&1 |");