AJAX Progress:从Shell中读取输出

问题描述:

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

是进入我脑海的第一件事:也许该程序检测到它不是一个TTY执行,因此不显示最后一行,其中可能涉及难看的控制字符,因为该行似乎更新自己?

将输出重定向到文件(在shell中)或通过更少的管道将会发生什么?如果你没有看到最后一行,那很可能是这种情况。我不知道解决问题的另一个解决办法。

+0

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

你在阅读到EOF吗?

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

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

pclose($handle); 

这将是您的朋友:

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

进一步信息可以在这里找到:Wikipedia