目标:创建一个进度条,用户可以在其中查看我的服务器已下载了多少文件。
场景:我有一个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 :(得分:3)
我想到的第一件事:也许程序检测到它没有在TTY上执行,因此没有显示最后一行,这可能涉及丑陋的控制字符,因为该行似乎更新了自己?
将输出重定向到文件(在shell中)或通过less传输时会发生什么?如果你没有看到最后一行,可能就是这种情况。我不知道另一个解决方案,而不是修复源。
答案 1 :(得分:0)
你是在读EOF吗?
$handle = popen('python last', 'r');
$read = "";
while (!feof($handle)) {
$read .= fread($handle, 4096);
}
pclose($handle);
答案 2 :(得分:0)