我正在尝试在运行此命令时仅捕获STDERR
my @output = `cleartool setview -exec "cd $myPath; $myBuildCommand" $myView 1>/dev/null`;
但是,我总是在@output中获得STDERR和STDOUT。
我正在尝试捕获运行$ myBuildCommand的警告和错误。任何想法?
答案 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的任何内容。