将php作为子进程运行


Running php as a sub process

我需要从python中调用一个PHP脚本。我在StackOverflow上找到了这个线程:

在Python 中执行php代码

所以我使用这个确切的方法来调用我的php脚本。然而,我得到以下错误:

php is not recognised as an internal or external command

首先,我认为这是因为php不在我的PATH环境变量中,所以添加了它,它在我的命令行中工作,但我的Python脚本一直返回相同的错误。我还尝试将php添加到我的PYTHONPATH中,得到了相同的结果。最后,我甚至尝试将php文件放在php可执行文件所在的文件夹中,但这也不起作用。

我需要更改什么才能使其工作?

编辑

我的操作系统是Windows7。这是我正在使用的代码:

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

您可以使用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,请阅读有关Windows如何搜索可执行文件的说明。

您可能需要使用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