我運行UNIX命令作爲停止輸出控制檯在Perl
$cmd="ls -l";
$result=`$cmd`;
print $log_file $result;
但從執行的輸出也被打印在屏幕上。 如何執行命令而不在屏幕上顯示結果?
我運行UNIX命令作爲停止輸出控制檯在Perl
$cmd="ls -l";
$result=`$cmd`;
print $log_file $result;
但從執行的輸出也被打印在屏幕上。 如何執行命令而不在屏幕上顯示結果?
標準輸出流不會被打印到屏幕 - 它被捕獲到$result
。但是還有第二個輸出流稱爲標準錯誤流,程序可以寫入,並且默認情況下也會進入屏幕。許多程序使用此流進行記錄,或者(在ls
的情況下)寫入錯誤消息。爲了捕捉這個此外,使用
$cmd = "ls -l 2>&1";
要放棄它,而不是使用
$cmd = "ls -l 2>/dev/null";
謝謝。這是我想要的 –
我覺得有一個錯誤。嘗試在一個外殼:
perl -e 'my $x = `ls -l`;'
這不會產生任何輸出。
這大概是因爲$log_file
以某種方式連接到STDOUT
,複製到它,像:
open(my $log_file, ">&STDOUT")
不,不是這樣的。您發佈的代碼不會顯示您對其所屬的行爲。沒有辦法將某些內容發送到屏幕和'$ log_file'。 – ikegami
相同 - 我運行你的代碼,並沒有得到任何輸出到屏幕上。 – BrianH
你的意思是,我認爲,*錯誤消息*仍然寫入屏幕 - 請澄清你的問題。 –