2009-02-07 59 views
1

Objective:創建一個進度條,用戶可以在其中檢查我的服務器已經下載了多少文件。AJAX Progress:從Shell中讀取輸出

場景:我有一個PHP腳本通過popen執行python腳本。我已經做到了這一點,像這樣:

$handle = popen('python last', 'r'); 

$read = fread($handle, 4096); 

pclose($handle); 

這python腳本輸出到shell是這樣的:

[last] ZVZX-W3vo9I: Downloading video webpage 
[last] ZVZX-W3vo9I: Extracting video information 
[download] Destination: myvideo.flv 
[download] 9.9% of 10.09M at 3.30M/s ETA 00:02 

問題:當我在shell輸出我得到的所有生成的文件中讀取shell的輸出除了最後一行!?爲什麼?

只需添加,當我通過shell運行命令時,shell光標出現在該行的末尾,並等待腳本完成。

感謝所有

+0

通過你的問題閱讀,我不禁注意到,*問題*你有(缺少來自輸入的行)與問題標題無關。您可能會更改標題以解決您的問題。也許「PHP:從shell讀取輸出」更好,因爲這不是AJAX相關的。 – Tomalak 2009-02-07 18:49:19

回答

3

是進入我腦海的第一件事:也許該程序檢測到它不是一個TTY執行,因此不顯示最後一行,其中可能涉及難看的控制字符,因爲該行似乎更新自己?

將輸出重定向到文件(在shell中)或通過更少的管道將會發生什麼?如果你沒有看到最後一行,那很可能是這種情況。我不知道解決問題的另一個解決辦法。

+0

是的,最後一行更新自己。我如何得到正在更新的內容? – Abs 2009-02-07 21:53:29

0

你在閱讀到EOF嗎?

$handle = popen('python last', 'r'); 
$read = ""; 

while (!feof($handle)) { 
    $read .= fread($handle, 4096); 
} 

pclose($handle); 
0

這將是您的朋友:

$handle = popen('python last 2>&1', 'r'); 

進一步信息可以在這裏找到:Wikipedia