Вызов Python из PHP с помощью Shell exec
Мое веб-приложение по умолчанию основано на PHP. Однако для удобства я построил скрипт на python, который выполняет некоторый анализ. Теперь мне нужен php, чтобы вызвать код python и получить вывод, который предоставляет код python. Оба файла находятся на одном сервере, но не в одной папке. Мой текущий подход, который не работает, выглядит следующим образом:
$cmd = "/usr/bin/python /var/www/include/sCrape.py -u '$my_url' ";
$response = shell_exec($cmd);
$response = json_decode($response, true);
Теперь, когда я пытаюсь распечатать $response, я получаю нулевой объект (он должен возвращать строку массива, которую я должен декодировать через json_decode). Я делаю что-то не так с функцией? Php находится в каталоге /var / www / html/. Следующий код работает, когда оба файла находятся в одном каталоге:
$cmd = "python sCrape.py -u '$my_url'";
$response = shell_exec($cmd);
$response = json_decode($response, true);
Дополнительная информация: my_url вводится как очищенная переменная $_POST из php, но теперь я попытался полностью отключить очистку, чтобы проверить, будет ли она работать, но это все равно не сработало (тем не менее, путь url-адреса до тех пор, пока он не достигнет функции, длиннее, так как он должен быть передан через form-post, тогда как в моем случае же-папки-тест, я просто объявили $my_url). постфикс-u означает, что скрипт вводит url-адрес.
Заранее большое вам спасибо!
1 ответ:
Вы пробовали запустить
/usr/bin/python /var/www/include/sCrape.py -u '$my_url'
в оболочке? Ошибка, вероятно, есть.Попробуйте:
$cmd = "/usr/bin/python /var/www/include/sCrape.py -u '$my_url' 2>&1"; $response = shell_exec($cmd); echo $response;
Это должно вывести сообщение об ошибке.
Почему?
shell_exec
возвращает только вывод из стандартного вывода (stdout), если возникает ошибка, то она записывается "в" стандартную ошибку (stderr).2>&1
перенаправляет stderr в stdout. Смотрите в оболочке, что означает "2>&1"?.Запуск кода python
Вы можете добавить
#!/usr/bin/env python
в первую строку вашего скрипта python и сделайте его исполняемымchmod +x /var/www/include/sCrape.py
. После этого вы сможете запустить свой скрипт без явного вызова python./var/www/include/sCrape.py -u '$my_url'