我无法让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输出只是
停止
谢谢
答案 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>