【问题标题】:Not getting entire response from popen没有得到 popen 的全部回复
【发布时间】:2012-01-21 08:07:43
【问题描述】:

您好,我正在使用 popen 运行一个进程;-

$handle = popen('python scriptos.py', "r");
while (!feof($handle)) {
    $data = fgets($handle);
    echo "> ".$data;
}

我只从返回 5 行的进程中得到 3 行。我在 CLi 中运行这个确切的命令,我会得到更多的响应。就好像它提前停止阅读(它可能需要时间来完成并在工作时更新接下来的 2 行,这是一个进度指示器)。

我做错了吗? proc_open 更合适吗(我已经开始看看是否可以尝试)。

【问题讨论】:

    标签: php popen proc-open


    【解决方案1】:

    这两行可能正在写入STDERR,而popen() 只返回一个STDOUT 指针。

    您可以使用proc_open() 获取STDERR 的指针,或将popen() 行更改为

    $handle = popen('python scriptos.py 2>&1', "r");
    

    将 STDERR 重定向到 STDOUT,以便它们包含在您的输出中。

    【讨论】:

    • +1,我也有同样的怀疑,在您阅读完所有内容之前,您不会收到 EOF。
    • PHP ...什么?ヽ(`Д´)ノ︵ ┻━┻
    猜你喜欢
    • 2013-09-20
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多