0

运行此命令时,我试图仅捕获 STDERR

my @output = `cleartool setview -exec "cd $myPath; $myBuildCommand" $myView 1>/dev/null`;

但是,我总是在 @output 中同时获得 STDERR 和 STDOUT。

我试图从运行 $myBuildCommand 中捕获警告和错误。有什么想法吗?

4

3 回答 3

3

在将 STDOUT 重定向到/dev/null. 顺序很重要!

my $stderr = `some-command 2>&1 > /dev/null`;

如果您颠倒重定向的顺序,则 STDERR 和 STDOUT 都以/dev/null.

于 2012-11-28T10:27:31.780 回答
3

如果你想做任何类型的非平凡命令捕获你几乎肯定想要IPC::Run的 .

use IPC::Run 'run';

my $exitcode = run [ $command, @args ], '>', \my $stdout, '2>', \my $stderr;

此时,两个标量$stdout$stderr现在将包含程序分别写入 STDOUT 和 STDERR 的任何内容。

于 2012-11-28T15:11:06.060 回答
3

要捕获命令的 STDERR 但丢弃其 STDOUT(此处排序很重要):

 my @output = `cmd 2>&1 1>/dev/null`;

另请参阅如何从外部命令捕获 STDERR?在 perlfaq8.

于 2012-11-28T10:34:27.220 回答