无法在 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 - “无法读取数据,因为它的格式不正确。”错误