无法在 php 中读取 python 的输出

Posted

技术标签:

【中文标题】无法在 php 中读取 python 的输出【英文标题】:can't read output from python in php 【发布时间】:2017-06-12 15:40:39 【问题描述】:

我无法从 python 脚本获取输出数据到 php。 php中没有抛出任何错误,并且python脚本从命令行完美输出。 Python:

import json,sys,mysqldb
db = MySQLdb.connect(host="localhost", user="root", passwd="root", db="sr")
cur = db.cursor()
def requestQuiz():
    sql = "SELECT quiz FROM wordbank ORDER BY RAND() LIMIT 1"
    cur.execute(sql)
    result_set = cur.fetchall()
    quiz = result_set[0][0]
    return json.dumps(quiz)

if __name__ == "__main__":
    #print solve(sys.argv[1])
    print requestQuiz()

PHP

<?php
$result = exec("python request.py");
$results_array = json_decode($result);
echo "<p>".$results_array."</p>";
?>

python 应该返回一个带引号的单词,例如"happy" 当我从命令行尝试时它会这样做

python request.py

我已经确认php和python在同一个目录下,python脚本名为“request.py”

【问题讨论】:

该文件的所有者是谁?是否可执行(chmod('request.py', '+x'))? “无法获取输出数据”是什么意思?返回的数据是否为空?是否抛出错误? @Carcigenicate PHP 中没有抛出错误。我所说的“无法获取输出数据”的意思是网页上没有显示任何内容,但我检查了 html,有

,但里面没有任何内容

.

阅读 PHP 的 exec() 的文档:“返回值:命令结果的最后一行。”它只得到一行 Python 脚本输出,而不是整个 JSON 文档。因此 json_decode() 无法解析不完整的 JSON,并返回 NULL。您需要使用shell_exec()passthru() 来获取Python 脚本的所有输出。 @BillKarwin 我都试过了,都不管用。嗯,python 应该返回一个单词,它是从命令行返回的。抱歉,我是新手。 【参考方案1】:

尝试使用shell_exec()。像这样..

<?php
$result = shell_exec("python request.py");
$results_array = json_decode($result);
echo "<p>".$results_array."</p>";
?>

更多 http://php.net/manual/en/function.shell-exec.php

【讨论】:

你为什么这么确定这是有效的解决方案,没有额外的信息? 但是如果在 PHP 的配置中禁用了 shell 访问呢?正如我所说,几乎没有信息。 不知道更多但是..这里的代码运行良好。通过 shell_exec() 将所有 css 合并到一个文件中。

以上是关于无法在 php 中读取 python 的输出的主要内容,如果未能解决你的问题,请参考以下文章

Swift/MySql/PHP - “无法读取数据,因为它的格式不正确。”错误

从 PHP 运行 Python 脚本

无法使用php读取数组中的重音名称[重复]

PHP实现对word文档的读取

无法在 spark 中保存 AsTextFile 但能够读取输出

文件内容操作