php - AJAX 进度 : Reading output from the Shell

标签 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 光标出现在该行的末尾并等待脚本完成。

谢谢大家

最佳答案

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

当您将输出重定向到一个文件(在 shell 中)或通过 less 管道输出时会发生什么?如果您在那里没有看到最后一行,很可能就是这种情况。除了修复源,我不知道还有其他解决方案。

关于php - AJAX 进度 : Reading output from the Shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/524286/

相关文章:

shell - 在 shell 中删除文件每一行的字符

shell - kubectl exec到pod中,如果通过自动化运行,则每次都无法使用TTY错误

javascript - 在页面内包含 API 调用以延迟加载

php - 使用 ffmpeg 而不是 flvmdi 将元数据添加到 flv 文件

c - 远程套接字上 select() 的行为已关闭(通过终止进程)

c - undefined reference usb_init()

linux - 如何从文本文件中删除换行符?

php - Magento 1.6 : Using MySQL datetime fields with resource models

php - Magento 中用于管理员登录身份验证的 API

c# - 控制托管在 docker 中的 .NET Core 控制台应用程序的生命周期