Как запустить фоновый сценарий Python в моем PHP-коде? [Дубликат]

В веб-приложении каждая задача выполняется в виде запроса и ответа.

Программирование на стороне клиента - это HTML-код с Java-скриптом и его фреймворками, библиотеки выполняются в Internet Explorer, Mozilla, Chrome-браузерах. В сценарии Java-сценария серверные сервлеты программирования выполняются в Tomcat, web-логике, j боссе, WebSphere severs

73
задан Benny Wong 3 October 2008 в 14:44
поделиться

8 ответов

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

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

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

preg_replace('/[^a-zA-Z0-9]/', '', $str)
98
ответ дан David Xia 27 August 2018 в 03:29
поделиться
  • 1
    Большое спасибо! Это было очень – Benny Wong 3 October 2008 в 17:30
  • 2
    Модуль подпроцесса заменил, используя os.Popen [n] напрямую. Вы должны использовать это вместо этого. – Nick Stinemates 4 October 2008 в 16:57
  • 3
    @Nick Stinemates: Мы говорим о функциях PHP;) – Glaslos 6 December 2011 в 07:54
  • 4
    нет решений, которые НЕ включают оболочку, такую ​​как C execve (), за исключением того, что она выполняется на отдельном процессе вместо того, чтобы сначала использовать fork (). – Lie Ryan 22 July 2012 в 16:57
  • 5
    Есть и всегда были решения, но вы должны запускать python где-нибудь, чтобы что-то извлечь из него. Вы можете сделать простой сервис python, который просто ждет ввода до тех пор, пока он не появится, или вы можете каким-либо образом запустить программу (например, linux inotify), тогда есть эти расширения PHP, а затем есть локальные сокеты для Linux-серверов. Python в PHP выглядит как лучшее решение NoShell, поскольку у другого (не-плагина) всегда будет какая-то оболочка вокруг вашего питона. – Sampo Sarrala 16 December 2014 в 22:58

Ваш 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()
2
ответ дан Aze 27 August 2018 в 03:29
поделиться

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

0
ответ дан Bob3411 27 August 2018 в 03:29
поделиться

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

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

7
ответ дан Eli Courtwright 27 August 2018 в 03:29
поделиться

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

15
ответ дан enobrev 27 August 2018 в 03:29
поделиться
  • 1
    Будьте предупреждены о названии "pip" также используется для описания чрезвычайно популярного и довольно стандартного инструмента управления пакетами Python, поэтому это действительно плохое, запутанное и обреченное имя для этого инструмента PHP. Возможно, поэтому он так долго не обновлялся. – GregD 31 July 2013 в 22:47
  • 2
    Похоже, что все еще идет (выбор без имени) github.com/jparise/php-python – benekastah 18 October 2013 в 19:38

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

Примечание: если вы запустите any time.sleep () в вашем коде python, он не выводит результаты в браузере.

Для работы с полными кодами, посетите . Как выполнить скрипт python с php и показать вывод в браузере

11
ответ дан Idealmind 27 August 2018 в 03:29
поделиться
  • 1
    Как указать путь здесь относительный и абсолютный. В основном у меня есть сценарий python, который присутствует в папке let tempmon, и в той же папке содержится мой скрипт python. Я хочу, чтобы приложение было переносимым, поэтому просто скопируйте папку tempmon в htdocs. И то же самое должно работать на разных машинах. – darth_coder 17 June 2015 в 17:40
  • 2
    Отлично работает. Вы можете добавить открывающие и закрывающие теги php & lt;? Php? & Gt; для лучшего понимания начинающего – zHs 10 October 2017 в 18:44

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

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

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

В php-файле, называемом python.php:

$python = `python python.py`;
echo $python;
25
ответ дан user 27 August 2018 в 03:29
поделиться

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

exec('your script python.py')
-1
ответ дан zondo 27 August 2018 в 03:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: