JMW*_*JMW 2 perl stdout stderr
可能的重复:
如何在 Perl 中同时捕获 stderr、stdout 和退出代码?
在通过管道将 STDOUT 传输到文件时捕获 STDERR 的输出
我正在使用以下代码来执行进程:
open( my $proch, "-|", $command, @arguments );
Run Code Online (Sandbox Code Playgroud)
不幸的是,我只会阅读stdout。但我也想阅读 stderr 。
Stderr 重定向会导致以下错误:
open( my $proch, "2>&1 -|", $command, @arguments );
>>> Unknown open() mode '2>&1 -|' at file.pl line 289
Run Code Online (Sandbox Code Playgroud)
如何将stderr转发到stdout?
2>&1是 shell 命令的一部分,但您没有执行 shell。
open( my $proch, "-|", 'sh', '-c', '"$@" 2>&1', '--', $command, @arguments );
Run Code Online (Sandbox Code Playgroud)
如果您想避免产生额外的进程,您可以使用以下命令:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1994 次 |
| 最近记录: |