Вызов Python в PHP
У меня есть скрипт Python, который я недавно написал и который я вызываю с использованием командной строки с некоторыми опциями. Теперь я хочу, чтобы очень тонкий веб-интерфейс вызывал этот скрипт локально на моем Mac.
Я не хочу проходить через мелкие проблемы с установкой mod_python или mod_wsgi на моем Mac, поэтому я просто собирался сделать system() или popen() из PHP для вызова скрипта Python.
Есть идеи получше? Заранее спасибо!
11 ответов
В зависимости от того, что вы делаете, system() или popen() могут быть идеальными. Используйте system(), если скрипт Python не имеет выходных данных, или если вы хотите, чтобы выходные данные скрипта Python передавались непосредственно в браузер. Используйте popen(), если вы хотите записать данные в стандартный ввод скрипта Python или прочитать данные из стандартного вывода скрипта Python в php. popen() позволит вам только читать или писать, но не обоим. Если вы хотите и то, и другое, проверьте proc_open (), но при двусторонней связи между программами вы должны быть осторожны, чтобы избежать взаимоблокировок, когда каждая программа ждет, пока другая что-то сделает.
Если вы хотите передать данные, предоставленные пользователем, в скрипт Python, то следует обратить особое внимание на внедрение команд. Если вы не будете осторожны, ваш пользователь может отправить вам данные типа "; evilcommand;" и заставить вашу программу выполнять произвольные команды против вашей воли.
escapeshellarg () и escapeshellcmd() могут помочь с этим, но лично мне нравится удалять все, что не является хорошим персонажем, используя что-то вроде
preg_replace('/[^a-zA-Z0-9]/', '', $str)
Оператор обратного цитирования также позволит вам запускать скрипты 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()
Вышеуказанные методы кажутся сложными. Используйте мой метод в качестве ссылки.
У меня есть два файла
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");
Согласен, все остальные варианты хороши. Я не буду их детализировать. Но у нас есть и другие. Во-первых, вы можете попробовать OpenAI и решение на основе нечеткой логики. Кроме того, есть несколько проектов GitHub, которые могут помочь. И, наконец, есть преобразователи поиска и замены строк.
Последние два варианта можно найти на моем сайте бесплатно. Описаны как PHP<->Python, так и мы предлагаем несколько конвертеров для каждого из них.
https://properprogramming.com/tools/converters/online-php-to-python-3-converter-version-2/https://properprogramming.com/tools/converters/free-online-php-to-python-3-конвертер/
Надеюсь, это поможет.
это так просто Вы можете использовать [phpy - библиотека для php][1] php файл
<?php
require_once "vendor/autoload.php";
use app\core\App;
$app = new App();
$python = $app->python;
$output = $python->set(your python path)->send(data..)->gen();
var_dump($ouput);
файл питона:
import include.library.phpy as phpy
print(phpy.get_data(number of data , first = 1 , two =2 ...))
вы также можете увидеть пример на странице github [1]: https://github.com/Raeen123/phpy
Обратите внимание, что если вы используете виртуальную среду (как в виртуальном хостинге), вы должны настроить свой путь к Python, например: /home/user/mypython/bin/python ./cgi-bin/test.py
Если вы хотите выполнить свой скрипт Python на PHP, необходимо выполнить эту команду в вашем PHP-скрипте:
exec('your script python.py')