捕获STDERR

时间:2012-11-28 10:24:23

标签: perl

我正在尝试在运行此命令时仅捕获STDERR

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

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

我正在尝试捕获运行$ myBuildCommand的警告和错误。任何想法?

3 个答案:

答案 0 :(得分:3)

在将STDOUT重定向到/dev/null之前,将STDERR重定向到STDOUT。订单很重要!

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

如果你颠倒了重定向的顺序,那么STDERR和STDOUT都会以/dev/null结束。

答案 1 :(得分:3)

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

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

另请参阅perlfaq8中的How can I capture STDERR from an external command?

答案 2 :(得分:3)

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

use IPC::Run 'run';

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

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