运行php作为子进程

时间:2014-10-29 15:29:32

标签: php python subprocess

我需要在python中调用PHP脚本。我在StackOverflow上找到了这个帖子:

Execute php code in Python

所以我使用这个确切的方法来调用我的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

2 个答案:

答案 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