AJAX Progress:从Shell读取输出

目标 :build立一个进度条,让用户可以检查我的服务器已经下载了多less文件。

场景 :我有一个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光标出现在该行的末尾,并等待脚本完成。

谢谢大家

Solutions Collecting From Web of "AJAX Progress:从Shell读取输出"

首先我想到的是:也许程序检测到它不在TTY上执行,因此不显示最后一行,这可能涉及丑陋的控制字符,因为该行似乎更新自己?

将输出重定向到一个文件(在shell中),或者通过较少的方式管理它会发生什么? 如果你没有看到最后一行,那很可能是这样。 我不知道另一个解决方案,而不是修复源代码。

你正在阅读,直到EOF?

 $handle = popen('python last', 'r'); $read = ""; while (!feof($handle)) { $read .= fread($handle, 4096); } pclose($handle); 

这将是你的朋友:

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

更多信息可以在这里找到: 维基百科