2012-10-18 74 views
-1

我運行UNIX命令作爲停止輸出控制檯在Perl

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

但從執行的輸出也被打印在屏幕上。 如何執行命令而不在屏幕上顯示結果?

+2

不,不是這樣的。您發佈的代碼不會顯示您對其所屬的行爲。沒有辦法將某些內容發送到屏幕和'$ log_file'。 – ikegami

+0

相同 - 我運行你的代碼,並沒有得到任何輸出到屏幕上。 – BrianH

+1

你的意思是,我認爲,*錯誤消息*仍然寫入屏幕 - 請澄清你的問題。 –

回答

4

標準輸出流不會被打印到屏幕 - 它被捕獲到$result。但是還有第二個輸出流稱爲標準錯誤流,程序可以寫入,並且默認情況下也會進入屏幕。許多程序使用此流進行記錄,或者(在ls的情況下)寫入錯誤消息。爲了捕捉這個此外,使用

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

要放棄它,而不是使用

$cmd = "ls -l 2>/dev/null"; 
+0

謝謝。這是我想要的 –

0

我覺得有一個錯誤。嘗試在一個外殼:

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

這不會產生任何輸出。

0

這大概是因爲$log_file以某種方式連接到STDOUT,複製到它,像:

open(my $log_file, ">&STDOUT")