perl open: how to forward stderr to stdout?



可能的重复项:
如何在 Perl 中同时捕获 stderr、stdout 和退出代码?
在将 STDOUT 管道传输到文件时捕获 STDERR 的输出

我使用以下一段代码来执行一个进程:

open( my $proch, "-|", $command, @arguments );

不幸的是,我只会阅读标准输出。但我也想阅读标准

Stderr 重定向会导致以下错误:

open( my $proch, "2>&1 -|", $command, @arguments );
>>> Unknown open() mode '2>&1 -|' at file.pl line 289
如何将标准输出

转发到标准输出

2>&1是 shell 命令的一部分,但您没有执行 shell。

open( my $proch, "-|", 'sh', '-c', '"$@" 2>&1', '--', $command, @arguments );

如果要避免生成额外的进程,可以使用以下内容:

use IPC::Open3 qw( open3 );
open local *CHILD_STDIN, '<', '/dev/null') or die $!;
my $pid = open3(
   '<&CHILD_STDIN',
   local *PROCH,
   undef, # 2>&1
   $command, @arguments
);
while (<PROCH>) { ... }
waitpid($pid, 0);

相关内容

  • 没有找到相关文章

最新更新