Мне нужно вызвать скрипт PHP из Python. Я нашел эту тему в 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
?
Вы можете использовать json для обмена данными между процессами. замещать return $result
в сценарии php с помощью:
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