2011-12-15 78 views
4

嗨整個響應我運行一個進程,POPEN; -沒有得到來自POPEN

$handle = popen('python scriptos.py', "r"); 
while (!feof($handle)) { 
    $data = fgets($handle); 
    echo "> ".$data; 
} 

而且我只從返回5行的過程得到3條線。我在CLi中運行這個確切的命令,我會得到更多的迴應。就好像它會提前停止閱讀(可能需要一段時間才能完成並更新接下來的兩行,這是一個進度指示器)。

我做錯了什麼?是proc_open更適合(我開始看我是否可以嘗試)。

回答

8

這兩條缺失的行可能正在寫入STDERR,並且popen()只返回一個STDOUT指針。

您可以使用proc_open()得到STDERR指針,或改變popen()

$handle = popen('python scriptos.py 2>&1', "r"); 

到STDERR重定向到STDOUT,所以它們被包含在你的輸出。

+0

+1,我也懷疑是一樣的,直到你看完所有的東西,你纔會得到EOF。 – codaddict 2011-12-15 16:30:56

相關問題