【发布时间】:2012-11-29 00:37:19
【问题描述】:
运行此命令时,我试图仅捕获 STDERR
my @output = `cleartool setview -exec "cd $myPath; $myBuildCommand" $myView 1>/dev/null`;
但是,我总是在 @output 中同时获得 STDERR 和 STDOUT。
我正在尝试从运行 $myBuildCommand 中捕获警告和错误。有什么好办法吗?
【问题讨论】:
标签: perl
运行此命令时,我试图仅捕获 STDERR
my @output = `cleartool setview -exec "cd $myPath; $myBuildCommand" $myView 1>/dev/null`;
但是,我总是在 @output 中同时获得 STDERR 和 STDOUT。
我正在尝试从运行 $myBuildCommand 中捕获警告和错误。有什么好办法吗?
【问题讨论】:
标签: perl
在将 STDOUT 重定向到 /dev/null 之前将 STDERR 重定向到 STDOUT。顺序很重要!
my $stderr = `some-command 2>&1 > /dev/null`;
如果您颠倒重定向的顺序,那么 STDERR 和 STDOUT 都会以 /dev/null 结束。
【讨论】:
qx 或 backtick)。
如果您想执行任何类型的重要命令来捕获您几乎肯定想要IPC::Run。
use IPC::Run 'run';
my $exitcode = run [ $command, @args ], '>', \my $stdout, '2>', \my $stderr;
此时,$stdout 和 $stderr 这两个标量现在将分别包含程序写入 STDOUT 和 STDERR 的任何内容。
【讨论】:
要捕获命令的 STDERR 但丢弃其 STDOUT(此处排序很重要):
my @output = `cmd 2>&1 1>/dev/null`;
另请参阅 perlfaq8 中的 How can I capture STDERR from an external command?。
【讨论】: