AJAX进度:从Shell读取输出

时间:2009-02-07 18:21:36

标签: php linux shell command-line

目标:创建一个进度条,用户可以在其中查看我的服务器已下载了多少文件。

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

全部谢谢

3 个答案:

答案 0 :(得分:3)

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

将输出重定向到文件(在shell中)或通过less传输时会发生什么?如果你没有看到最后一行,可能就是这种情况。我不知道另一个解决方案,而不是修复源。

答案 1 :(得分:0)

你是在读EOF吗?

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

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

pclose($handle);

答案 2 :(得分:0)

这将是你的朋友:

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

可在此处找到更多信息:Wikipedia