【问题标题】:PHP show return from python scriptPHP显示从python脚本返回
【发布时间】:2017-04-02 04:05:21
【问题描述】:

我无法让 php 显示我的 python 脚本的完整结果,只打印最后一个基本打印语句。我在这里做错了什么?为什么php没有显示python脚本的输出?

php

$result = exec('python list.py');
echo $result;

list.py

import subprocess

print "start"

a = subprocess.Popen(["ls", "-a"], stdout=subprocess.PIPE)
a.wait()
result_str = a.stdout.read()
print result_str

print "stop"

该python脚本的命令行输出如下

start
...filename
...filename
...etc...etc

stop

执行python脚本的php输出只有

停止

谢谢

【问题讨论】:

    标签: php python output exec


    【解决方案1】:

    您需要将$result 作为参数传递给exec(),否则您只会得到最后一条语句。

    exec('python list.py', $result);
    print_r($result);
    

    这将获得一个输出数组,$result[0] 将包含 stop$result[sizeof($result)-1] 将包含 stop 并且介于两者之间的所有内容都将包含您的程序输出的其余部分。

    【讨论】:

    • 这个使用 print_r($result);显示 Start 和 ($result[0]) 显示 S,但 ($result[-1]) 什么也没显示。 print_r($result[sizeof($result)-1]);给我看S
    • @Anthony 请重新阅读我写的内容。看来您仍在使用$result = exec('python list.py'); 而不是exec('python list.py', $result);
    • 按照书面形式执行 exec('python list.py', $result); print_r($result[0]);我得到了如上所述的结果
    • 我已经测试并确认,唯一的方式是您仍在使用$result = exec('python list.py');$result = exec('python list.py', $result);。我提供的确切代码按预期工作。
    【解决方案2】:

    exec总是返回命令结果的最后一行。因此,如果您需要从执行的命令中获取每一行输出。然后,您需要编写如下:

    $result = exec('python list.py', $ouput);
    print_r($output)
    

    根据 exec 文档

    string exec ( string $command [, array &$output [, int &$return_var ]] )
    

    如果存在output 参数,那么指定的数组将是 填充命令的每一行输出。 尾随 此数组中不包含空格,例如 \n。请注意,如果 数组已经包含一些元素, exec() 将附加到 数组的末尾。如果您不希望函数附加元素, 在将数组传递给 exec() 之前调用数组上的 unset()。

    【讨论】:

      猜你喜欢
      • 2015-10-06
      • 2015-10-18
      • 2018-01-02
      • 1970-01-01
      • 2016-03-14
      相关资源
      最近更新 更多