W zależności od tego, co robisz, system () lub popen () mogą być idealne. Użyj system (), jeśli skrypt w języku Python nie ma wyjścia lub jeśli chcesz, aby dane wyjściowe skryptu w języku Python były kierowane bezpośrednio do przeglądarki. Użyj popen (), jeśli chcesz zapisać dane na standardowe wejście skryptu Pythona lub odczytać dane ze standardowego wyjścia skryptu Python w php. popen () pozwoli ci tylko czytać i pisać, ale nie jedno i drugie. Jeśli chcesz mieć jedno i drugie, wypróbuj proc_open () , ale przy dwukierunkowej komunikacji między programami musisz uważać, aby uniknąć zakleszczeń, w których każdy program czeka, aż drugi coś zrobi.
Jeśli chcesz przekazać dane dostarczone przez użytkownika do skryptu Pythona, najważniejszą rzeczą, na którą należy uważać, jest wstrzyknięcie poleceń. Jeśli nie jesteś ostrożny, twój użytkownik może wysłać ci dane takie jak "; evilcommand;" i spraw, aby twój program wykonywał dowolne polecenia wbrew twojej woli.
escapeshellarg () i escapeshellcmd () mogą w tym pomóc, ale osobiście lubię usuwać wszystko, co nie jest znaną dobrą postacią, używając czegoś takiego jak
preg_replace('/[^a-zA-Z0-9]/', '', $str)
Operator odwrotnego cudzysłowu umożliwia również uruchamianie skryptów Pythona przy użyciu podobnej składni do powyższej
W pliku Pythona o nazwie python.py:
hello = "hello" world = "world" print hello + " " + world
W pliku php o nazwie python.php:
$python = `python python.py`; echo $python;
źródło
Jest też rozszerzenie PHP: Pip - Python w PHP , którego nigdy nie próbowałem, ale dodałem go do zakładek właśnie na taką okazję
źródło
Możesz uruchomić skrypt w Pythonie za pośrednictwem php i wyjść w przeglądarce.
Zasadniczo musisz wywołać skrypt w Pythonie w ten sposób:
$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);
Uwaga: jeśli uruchomisz time.sleep () w swoim kodzie Pythona, nie wyświetli wyników w przeglądarce.
Aby uzyskać pełne działanie kodu, odwiedź stronę Jak wykonać skrypt w języku Python z php i wyświetlić dane wyjściowe w przeglądarce
źródło
tempmon
a ten sam folder zawiera mój skrypt Pythona. Chcę, aby aplikacja była przenośna, więc mogę po prostu skopiowaćtempmon
folder podhtdocs
. To samo powinno działać na różnych maszynach.Robię takie rzeczy cały czas dla szybkich i brudnych skryptów. Dość często mamy skrypt CGI lub PHP, który po prostu używa system / popen do wywołania zewnętrznego programu.
Po prostu zachowaj szczególną ostrożność, jeśli Twój serwer sieciowy jest ogólnie otwarty na Internet. W takim przypadku należy wyczyścić dane wejściowe GET / POST, aby uniemożliwić atakującym wykonywanie dowolnych poleceń na komputerze.
źródło
Twój plik call_python_file.php powinien wyglądać tak:
<?php $item='Everything is awesome!!'; $tmp = exec("py.py $item"); echo $tmp; ?>
Spowoduje to wykonanie skryptu w języku Python i przesłanie wyniku do przeglądarki. Podczas gdy w skrypcie Pythona zmienna (sys.argv [1:]) będzie zawierać wszystkie argumenty. Aby wyświetlić argv jako ciąg znaków z dowolnego miejsca, z którego pobiera twój php, więc jeśli chcesz zrobić obszar tekstowy:
import sys list1 = ' '.join(sys.argv[1:]) def main(): print list1 if __name__ == '__main__': main()
źródło
Zwróć uwagę, że jeśli korzystasz ze środowiska wirtualnego (jak w hostingu współdzielonym), musisz dostosować ścieżkę do Pythona, np .:
/home/user/mypython/bin/python ./cgi-bin/test.py
źródło
Powyższe metody wydają się być złożone. Użyj mojej metody jako odniesienia.
Mam te dwa pliki
Tutaj utworzyłem stronę html, która zawiera przycisk GO. Za każdym razem, gdy naciśniesz ten przycisk, nowy folder zostanie utworzony w katalogu, do którego podałeś ścieżkę.
<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"; } ?>
#!/usr/bin/env python import os os.makedirs("thisfolder");
źródło
Jeśli chcesz wykonać skrypt Pythona w PHP, musisz wykonać to polecenie w swoim skrypcie php:
exec('your script python.py')
źródło
your
z parametramiscript
ipython.py
. b) O ile skrypt Pythona nie ma odpowiedniego shebang, należy wywołać interpreter Pythona i przekazać mu nazwę skryptu (python script.py
). Nawet z odpowiednim shebangiem jest to niewłaściwe, ponieważ wtedy dzwonisz,./script.py
zamiast używać nazwiska tłumacza.