4

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

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

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

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

4

3 回答 3

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

于 2013-06-14T14:07:56.663 回答
0

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

于 2013-06-14T14:10:24.030 回答
-1

我在 perl 代码中使用 Bash 重定向,如下所示:

open (CMDOUT, "df -h 2>&1 |");
于 2013-06-14T13:57:47.220 回答