Perl 捕获STDERR

Perl 捕获STDERR,perl,Perl,我试图在运行此命令时仅捕获STDERR my @output = `cleartool setview -exec "cd $myPath; $myBuildCommand" $myView 1>/dev/null`; 然而,我总是在@output中同时获得STDERR和STDOUT 我试图捕获运行$myBuildCommand时出现的警告和错误。任何IDE?在将标准输出重定向到/dev/null之前,将标准输出重定向到标准输出。秩序很重要 my $stderr = `some-comm

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

my @output = `cleartool setview -exec "cd $myPath; $myBuildCommand" $myView 1>/dev/null`;
然而,我总是在@output中同时获得STDERR和STDOUT


我试图捕获运行$myBuildCommand时出现的警告和错误。任何IDE?

在将标准输出重定向到/dev/null之前,将标准输出重定向到标准输出。秩序很重要

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

如果颠倒重定向顺序,则STDERR和STDOUT都将以/dev/null结尾。

要捕获命令的STDERR,但放弃其STDOUT顺序,在这里很重要:

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

如果您想执行任何类型的非平凡命令捕获,请参阅perlfaq8.

,您几乎肯定想要IPC::Run


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

好的,我不知道。然而,我肯定还是做错了什么。我想我是在重定向其他东西,因为@output总是同时获得STDERR和STDOUT。您最初的问题只显示重定向STDOUT,而不是STDERR。顺便提一下列出了捕获STDERR而不是STDOUT查找qx或backtick的示例。我尝试仅从命令行执行此操作:ls 2>&1 1>/dev/null会导致输出不明确重定向我尝试仅从命令行执行此操作:ls 2>&1 1>/dev/null会导致输出不明确redirect@user1758367不明确的重定向意味着您正在使用csh。csh没有提供一种合理的机制来分离标准输出和标准输出。
use IPC::Run 'run';

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