Python — Запуск PHP как подпроцесс

Мне нужно вызвать скрипт PHP из Python. Я нашел эту тему в StackOverflow:

Выполнить PHP-код в 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 ?

0

Решение

Вы можете использовать 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 ищет исполняемые файлы.

2

Другие решения

Возможно, вам придется использовать полный путь к 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
0

По вопросам рекламы [email protected]