运行此命令时,我试图仅捕获 STDERR
my @output = `cleartool setview -exec "cd $myPath; $myBuildCommand" $myView 1>/dev/null`;
但是,我总是在 @output 中同时获得 STDERR 和 STDOUT。
我试图从运行 $myBuildCommand 中捕获警告和错误。有什么想法吗?
运行此命令时,我试图仅捕获 STDERR
my @output = `cleartool setview -exec "cd $myPath; $myBuildCommand" $myView 1>/dev/null`;
但是,我总是在 @output 中同时获得 STDERR 和 STDOUT。
我试图从运行 $myBuildCommand 中捕获警告和错误。有什么想法吗?
在将 STDOUT 重定向到/dev/null
. 顺序很重要!
my $stderr = `some-command 2>&1 > /dev/null`;
如果您颠倒重定向的顺序,则 STDERR 和 STDOUT 都以/dev/null
.
如果你想做任何类型的非平凡命令捕获你几乎肯定想要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`;
另请参阅如何从外部命令捕获 STDERR?在 perlfaq8.