Вызов Python в PHP - PullRequest
       20

Вызов Python в PHP

75 голосов
/ 03 октября 2008

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

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

Есть идеи получше? Заранее спасибо!

Ответы [ 9 ]

101 голосов
/ 03 октября 2008

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

Если вы хотите передать данные, предоставленные пользователем, в скрипт Python, то следует обратить особое внимание на внедрение команд. Если вы не будете осторожны, ваш пользователь может отправить вам данные типа "; evilcommand;" и заставить вашу программу выполнять произвольные команды против вашей воли.

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

preg_replace('/[^a-zA-Z0-9]/', '', $str)
25 голосов
/ 20 сентября 2013

Оператор обратных цитат также позволит вам запускать скрипты Python, используя синтаксис, аналогичный приведенному выше

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

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

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

$python = `python python.py`;
echo $python;
15 голосов
/ 04 октября 2008

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

11 голосов
/ 22 июля 2012

Вы можете запустить скрипт 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 и показать вывод в браузере

7 голосов
/ 03 октября 2008

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

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

2 голосов
/ 01 ноября 2016

Ваш 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()
0 голосов
/ 30 октября 2018

Вышеуказанные методы кажутся сложными. Используйте мой метод в качестве ссылки.

У меня есть два файла

run.php

mkdir.py

Здесь я создал html-страницу, которая содержит кнопку GO. Каждый раз, когда вы нажимаете эту кнопку, в каталоге, путь которого вы указали, будет создана новая папка.

run.php

<html>
 <body>
  <head>
   <title>
     run
   </title>
  </head>

   <form method="post">

    <input type="submit" value="GO" name="GO">
   </form>
 </body>
</html>

<?php
    if(isset($_POST['GO']))
    {
        shell_exec("python /var/www/html/lab/mkdir.py");
        echo"success";
    }
?>

mkdir.py

#!/usr/bin/env python    
import os    
os.makedirs("thisfolder");
0 голосов
/ 09 августа 2017

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

0 голосов
/ 17 июня 2016

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

exec('your script python.py')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...