PHP显示从python脚本返回

时间:2017-04-02 04:05:21

标签: php python output exec

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

php

foreach ($cart_row as $value) {
    $stmt = "INSERT INTO user_cart(ProductName, Qty, Price) VALUES (?, ?, ?)";
    $stmt = mysqli_stmt_prepare($con, $stmt);
    mysqli_stmt_bind_param($stmt, "sii", $value["product_name"], $value["quantity"], $value["price"]);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);
}

list.py

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

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

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脚本的php输出只是

  

停止

谢谢

2 个答案:

答案 0 :(得分:1)

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()。

答案 1 :(得分:1)

您需要将$result作为参数传递给exec(),否则您只能获得最后一个声明。

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

这将得到一个输出数组,$result[0]将包含stop$result[sizeof($result)-1]将包含stop,其间的所有内容都将包含其余的程序输出。< / p>