-1

perlでunixコマンドを実行しています

$cmd="ls -l";
$result=`$cmd`;
print $log_file $result;

ただし、実行からの出力も画面に出力されます。画面に結果を出力せずにコマンドを実行する方法は?

4

3 に答える 3

4

標準出力ストリームは画面に出力されません-にキャプチャされ$resultます。ただし、プログラムが書き込むことができる標準エラーストリームと呼ばれる2番目の出力ストリームがあり、これもデフォルトで画面に表示されます。多くのプログラムは、このストリームをログに記録するため、または(の場合ls)エラーメッセージを書き込むために使用します。これをさらにキャプチャするには、

$cmd = "ls -l 2>&1";

代わりに破棄するには、

$cmd = "ls -l 2>/dev/null";
于 2012-10-18T17:16:36.803 に答える
0

間違いがあると思います。シェルでそれを試してください:

perl -e 'my $x = `ls -l`;'

それは出力を生成しません。

于 2012-10-18T17:16:59.843 に答える
0

おそらく、$log_file何らかの形で に接続されSTDOUT、複製されているために発生します。次のようなものです。

open(my $log_file, ">&STDOUT") 
于 2012-10-18T18:39:58.213 に答える