【问题标题】:Execute shell, get and display result realtime using PHP使用 PHP 实时执行 shell,获取并显示结果
【发布时间】:2016-10-30 11:55:22
【问题描述】:

我需要使用 Python 执行一些较长的过程,该过程将使用 PHP(我的主要语言)调用并实时显示结果。

假设这是我的 Python 脚本 (a.py)。

import time

for x in range(10):
    print "S;adasdasd;",x
    time.sleep(0.5)

我尝试了很多来自互联网的示例,但总是得到相同的结果。 PHP 总是等到脚本完成后再显示它。

这是我尝试过的众多代码之一。

    header( 'Content-type: text/html; charset=utf-8' );
    $handle = popen('python folder\\a.py', 'r');
    while (!feof($handle)) {
            echo fgets($handle);
            flush();
            ob_flush();
    }
    pclose($handle);

我错过了什么吗?

【问题讨论】:

  • 尝试在 PHP 中添加一个字符集作为标题。见这里:stackoverflow.com/a/12740522/128161
  • 试过但结果相同,我已经更新了问题
  • fread($handle, 1024); 代替fgets怎么样?
  • nope.still 给我同样的结果,我需要配置我的 PHP 还是什么?
  • 我不确定是否诚实。这可能与 popen 而不是使用 fopen 有关。您是否可以稍微更改代码以使用 fopen 并将 URL 设置为网站并逐行输出内容。如果这样可行,那么问题将出在 popen 而不是您的服务器配置中,因此可能有助于缩小问题范围。

标签: php python shell real-time


【解决方案1】:

PHP 总是等到脚本完成后再显示它。

在这种情况下,这不是 PHP 的错;这是因为如果它进入管道,Python 会完全缓冲其标准输出。幸运的是,Python 有一个方便的选项 -u 来禁用 stdout 和 stderr 缓冲,所以使用

    $handle = popen('python -u folder\\a.py', 'r');

解决问题。另见Disable output buffering

【讨论】:

  • 一直在寻找解决方案,这确实解决了它。不敢相信就这么简单。
猜你喜欢
  • 2013-08-11
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
相关资源
最近更新 更多