Вызов Python в PHP
У меня есть Python script Недавно я написал, что я вызываю с помощью командной строки с некоторыми параметрами. Теперь я хочу, чтобы очень тонкий веб-интерфейс вызывал этот script локально на моем Mac.
Я не хочу проходить небольшую проблему с установкой mod_python или mod_wsgi на моем Mac, поэтому я просто собираюсь сделать system() или popen() из PHP, чтобы вызвать Python script.
Любые лучшие идеи? Спасибо заранее!
Ответы
Ответ 1
В зависимости от того, что вы делаете, system() или popen ( ) может быть совершенным. Используйте system(), если Python script не имеет выхода, или если вы хотите, чтобы вывод Python script передавался непосредственно в браузер. Используйте popen(), если вы хотите записать данные на стандартный вход Python script или прочитать данные из стандартного вывода Python script в php. popen() позволит вам читать или писать, но не то, и другое. Если вы хотите оба, проверьте proc_open(), но при двухсторонней связи между программами вам нужно быть осторожным, чтобы избежать тупиков, где каждая программа ожидая другого, чтобы что-то сделать.
Если вы хотите передать данные, предоставленные пользователем, на Python script, тогда большая вещь, о которой нужно заботиться, - это командная инъекция. Если вы не будете осторожны, ваш пользователь может отправить вам такие данные, как "; evilcommand"; и заставить вашу программу выполнять произвольные команды против вашей воли.
escapeshellarg() и escapeshellcmd() может помочь с этим, но лично мне нравится удалять все, что не является известным хорошим персонажем, используя что-то вроде
preg_replace('/[^a-zA-Z0-9]/', '', $str)
Ответ 2
Оператор backquote также позволит вам запускать скрипты python с использованием аналогичного синтаксиса выше
В файле python с именем python.py:
hello = "hello"
world = "world"
print hello + " " + world
В php файле python.php:
$python = `python python.py`;
echo $python;
Ответ 3
Также есть расширение PHP: Pip - Python в PHP, который я никогда не пробовал, но он закладовал только для такого случая
Ответ 4
Вы можете запустить python script через php и вывести в браузере.
В основном вы должны вызвать python script следующим образом:
$command = "python /path/to/python_script.py 2>&1";
$pid = popen( $command,"r");
while( !feof( $pid ) )
{
echo fread($pid, 256);
flush();
ob_flush();
usleep(100000);
}
pclose($pid);
Примечание: если вы запустите любое time.sleep() в вашем коде python, он не выведет результаты в браузере.
Для работы с полными кодами посетите Как выполнить python script из php и показать вывод в браузере
Ответ 5
Я все время занимаюсь такими быстрыми и грязными сценариями. Достаточно часто иметь CGI или PHP script, который просто использует system/popen для вызова некоторой внешней программы.
Просто будьте осторожны, если ваш веб-сервер открыт для Интернета в целом. В этом случае убедитесь, что вы санировали свой вход GET/POST, чтобы не позволить злоумышленникам запускать произвольные команды на вашем компьютере.
Ответ 6
Ваш call_python_file.php должен выглядеть следующим образом:
<?php
$item='Everything is awesome!!';
$tmp = exec("py.py $item");
echo $tmp;
?>
Выполняет python script и выводит результат в браузер.
Пока в вашем python script переменная (sys.argv [1:]) будет приводить все ваши аргументы. Чтобы отобразить argv как строку для везде, где ваш php вытаскивает, так что если вы хотите сделать текстовую область:
import sys
list1 = ' '.join(sys.argv[1:])
def main():
print list1
if __name__ == '__main__':
main()
Ответ 7
Обратите внимание: если вы используете виртуальную среду (как в режиме совместного хостинга), вы должны настроить свой путь на python, например: /home/user/mypython/bin/python ./cgi-bin/test.py
Ответ 8
Если вы хотите выполнить свой Python script в PHP, необходимо выполнить эту команду в вашем PHP скрипт:
exec('your script python.py')