我想将包含stderr的命令的输出读入HANDLE:
open(HANDLE, "-|", $cmd, @args);
但上面的命令只是读取stdin?
我怎样才能阅读stderr?
答案 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 |");