2010-06-22 38 views
1

我有一個程序,它從外部應用程序讀取輸出。外部應用程序給出了一組輸出。我的程序從外部應用程序while($line=<handle to external app>)讀取輸出並將其打印到STDOUT.But「print $line STDOUT」只打印一些行,當發生錯誤時,打印到STDOUT不起作用,但我的另一個日誌語句「push @arr,$line」已存儲完成從外部應用程序的輸出。從這我知道錯誤發生時,STDOUT不能正常工作。STDOUT外部重定向,在控制檯看不到輸出

如: 如果外部應用程序的輸出是這樣的:


Starting command 
First command executed successfully  
Error:123 :next command failed  
Program terminated 

在這裏STDOUT只打印:

Starting command 
First command executed successfully 

但是如果我檢查數組它有完整的輸出包括錯誤細節。所以我猜想STDOUT已被重定向或丟失。

於是,我就在節目的開頭存儲STDOUT$old_handle using打開,然後嘗試使用select($old_handle) print語句之前恢復(想一些事情重定向標準輸出時發生錯誤)

,但是我沒全成,我不知道這裏出了什麼問題。請幫幫我。

+0

爲什麼是這個問題的社區維基?有些人可能不願意回答,因爲upvotes不會給他們任何聲譽。 – Ether 2010-06-22 16:13:28

回答

1

輸出可能被緩衝。嘗試設置

$| = 1; 

在您的程序開始。這將導致輸出顯示直接,而不是稍後緩衝。

+0

嗨,我已經沖洗緩衝區 – any01 2010-06-29 09:16:03

0

只是猜測,可能是因爲錯誤輸出不會去STDOUT。使用重定向

first_program |& perl_program 

first_program 2>&1 | perl_program 
+0

STDERR已被重新定向 – any01 2010-06-29 09:17:05

相關問題