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光标出现在该行的末尾,并等待脚本完成。
感谢所有
答
是进入我脑海的第一件事:也许该程序检测到它不是一个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);
通过你的问题阅读,我不禁注意到,*问题*你有(缺少来自输入的行)与问题标题无关。您可能会更改标题以解决您的问题。也许“PHP:从shell读取输出”更好,因为这不是AJAX相关的。 – Tomalak 2009-02-07 18:49:19