2014-10-29 3 views
0

Мне нужно вызвать PHP-скрипт изнутри python. Я нашел эту тему на StackOverflow:Запуск php в качестве подпроцесса

Execute php code in Python

Поэтому я использую этот точный метод назвать мой PHP скрипт. Тем не менее, я получаю следующее сообщение об ошибке:

php is not recognised as an internal or external command 

Сначала я полагал, что это было потому, что PHP не был в моей переменном PATH среды, поэтому добавил ее, и она работала в моей командной строке, но мой Python скрипт продолжал возвращаться тем же ошибка. Я также попытался добавить php к моему PYTHONPATH с тем же результатом. Я, наконец, даже попытался поместить файл php в папку, где находится исполняемый файл php, но это также не сработало.

Что мне нужно изменить, чтобы это сработало?

EDIT

Моя операционная система Windows 7 Это код, я использую:

proc = subprocess.Popen("php C:/xampp/htdocs/test/test.php", shell=True, stdout=subprocess.PIPE) 
script_response = proc.stdout.read() 

Я не пытался запустить мой питон скрипт из моей командной строки, которая не создает ошибку и выполняет скрипт php. Однако переменная script_response пуста.

Это последняя строка моего test.php файла:

return $aResult; 

Я проверил $aResult, он содержит значение, так что это не возвращение должным образом. Нужно ли мне что-то еще в моем php-скрипте вместо return?

+0

Какая операционная система вы используете? – Jerodev

+0

Пожалуйста, вставьте полный код, который вы используете! – motanelu

+0

(предположим, что вы находитесь под операционной системой Microsoft). Добавляйте PHP в переменную окружения навсегда, затем запустите новую командную строку и запустите свой скрипт python. –

ответ

2

Вы можете использовать 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 не найден, то read this explanation about how Windows searches for executables.

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 
Смежные вопросы