Вызов Python в PHP

У меня есть скрипт Python, который я недавно написал, который я вызываю с помощью командной строки с некоторыми параметрами. Теперь я хочу, чтобы очень тонкий веб-интерфейс вызывал этот скрипт локально на моем Mac.

Я не хочу испытывать незначительные проблемы с установкой mod_python или mod_wsgi на моем Mac, поэтому я просто собираюсь сделать system () или popen () из PHP, чтобы вызвать скрипт Python.

Любые лучшие идеи? Заранее спасибо!

В зависимости от того, что вы делаете, system () или popen () могут быть идеальными. Используйте system (), если сценарий Python не имеет выхода, или если вы хотите, чтобы выход скрипта Python переходил непосредственно в браузер. Используйте popen (), если вы хотите записать данные на стандартный ввод сценария Python или прочитать данные из стандартного вывода скрипта Python в php. popen () позволит вам читать или писать, но не то, и другое. Если вы хотите оба, проверьте proc_open () , но с двухсторонней связью между программами вы должны быть осторожны, чтобы избежать взаимоблокировок, где каждая программа ждет другого, чтобы что-то сделать.

Если вы хотите передать данные, предоставленные пользователем в сценарий Python, то большая вещь, о которой нужно быть осторожным, – это командная инъекция. Если вы не будете осторожны, ваш пользователь может отправить вам такие данные, как «; evilcommand»; и заставить вашу программу выполнять произвольные команды против вашей воли.

escapeshellarg () и escapeshellcmd () могут помочь с этим, но лично мне нравится удалять все, что не является известным хорошим персонажем, используя что-то вроде

preg_replace('/[^a-zA-Z0-9]/', '', $str) 

Оператор backquote также позволит вам запускать скрипты python с использованием аналогичного синтаксиса выше

В файле python с именем python.py:

 hello = "hello" world = "world" print hello + " " + world 

В php-файле python.php:

 $python = `python python.py`; echo $python; 

Существует также расширение PHP: Pip – Python в PHP , который я никогда не пробовал, но он закладовал именно такой случай

Вы можете запустить скрипт python через php и вывести его в браузере.

В основном вы должны вызвать скрипт python таким образом:

 $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 из php и показать вывод в браузере

Я все время занимаюсь такими быстрыми и грязными сценариями. Очень часто существует сценарий CGI или PHP, который просто использует system / popen для вызова какой-либо внешней программы.

Просто будьте осторожны, если ваш веб-сервер открыт для Интернета в целом. В этом случае убедитесь, что вы дезактивируете свой вход GET / POST, чтобы не позволить злоумышленникам выполнять произвольные команды на вашем компьютере.

Ваш call_python_file.php должен выглядеть так:

 <?php $item='Everything is awesome!!'; $tmp = exec("py.py $item"); echo $tmp; ?> 

Это выполняет скрипт python и выводит результат в браузер. Хотя в вашем скрипте python переменная (sys.argv [1:]) будет содержать все ваши аргументы. Чтобы отобразить argv как строку для везде, где ваш php вытаскивает, так что если вы хотите сделать текстовую область:

 import sys list1 = ' '.join(sys.argv[1:]) def main(): print list1 if __name__ == '__main__': main() 

Обратите внимание: если вы используете виртуальную среду (как в режиме совместного хостинга), вы должны настроить свой путь на python, например: /home/user/mypython/bin/python ./cgi-bin/test.py

Если вы хотите выполнить свой скрипт Python в PHP, необходимо выполнить эту команду в вашем php-скрипте:

 exec('your script python.py')