0

このコマンドの実行時に STDERR のみをキャプチャしようとしています

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

ただし、@output では常に STDERR と STDOUT の両方を取得します。

$myBuildCommand の実行による警告とエラーをキャッチしようとしています。何かアイデアはありますか?

4

3 に答える 3

3

STDOUTをにリダイレクトする前に、STDERRを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;

この時点で、2 つのスカラー$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 に答える