Вызов 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')