我需要在python中调用PHP脚本。我在StackOverflow上找到了这个帖子:
所以我使用这个确切的方法来调用我的PHP脚本。但是,我收到以下错误:
php is not recognised as an internal or external command
首先我认为这是因为php不在我的PATH环境变量中,所以添加它并且它在我的命令行中工作,但我的Python脚本仍然返回相同的错误。我也尝试将PHP添加到我的PYTHONPATH中,结果相同。我终于甚至试图将php文件放在php可执行文件所在的文件夹中,但这也没有用。
为了实现这一目标,我需要更改什么?
修改
我的操作系统是Windows 7.这是我使用的代码:
proc = subprocess.Popen("php C:/xampp/htdocs/test/test.php", shell=True, stdout=subprocess.PIPE)
script_response = proc.stdout.read()
我没有尝试从命令行运行我的python脚本,这不会产生错误并执行php脚本。但script_response
变量为空。
这是我的test.php
文件的最后一行:
return $aResult;
我检查了$aResult
,它确实包含一个值,因此无法正常返回。我的php脚本中是否需要其他内容而不是return
?
答案 0 :(得分:2)
您可以使用json在进程之间交换数据。将PHP脚本中的return $result
替换为:
echo json_encode($result);
在Python中:
import json
from subprocess import check_output
result = json.loads(check_output(["php", "/path/to/test.php"]).decode('utf-8'))
如果找不到php
,则read this explanation about how Windows searches for executables。
答案 1 :(得分:0)
您可能必须使用PHP的完整路径,而不是简单地调用php
。
如果您使用的是Unix系统,可以通过在终端中输入which php
找到完整路径,并返回/usr/bin/php
之类的内容。在Windows上,我认为您可以键入where php.exe
来查找完整路径。
然后在你的Python脚本中你可以这样做:
# Run PHP script
command = "/full/path/to/php /path/to/myscript.php"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
response = process.stdout.read()
# Print response from PHP script
print response