このコマンドの実行時に 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をにリダイレクトする前に、STDERRを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;
この時点で、2 つのスカラー$stdout
に$stderr
は、プログラムがそれぞれ STDOUT と STDERR に書き込んだものが含まれます。
コマンドの STDERR を取得し、その STDOUT を破棄するには (ここでは順序が重要です):
my @output = `cmd 2>&1 1>/dev/null`;
外部コマンドから STDERR をキャプチャするにはどうすればよいですか?も参照してください。perlfaq8 で。