it-swarm.com.de

Python anrufen PHP

Ich habe ein Python-Skript, das ich kürzlich geschrieben habe und das ich über die Befehlszeile mit einigen Optionen aufrufe. Ich möchte jetzt eine sehr dünne Weboberfläche, um dieses Skript lokal auf meinem Mac aufzurufen.

Ich möchte nicht die kleine Mühe machen, mod_python oder mod_wsgi auf meinem Mac zu installieren, also wollte ich nur ein system () oder popen () von PHP machen, um das Python-Skript aufzurufen.

Irgendwelche besseren Ideen? Danke im Voraus!

73
Benny Wong

Abhängig davon, was Sie tun, kann system () oder popen () perfekt sein. Verwenden Sie system (), wenn das Python-Skript keine Ausgabe hat oder wenn die Ausgabe des Python-Skripts direkt an den Browser gesendet werden soll. Verwenden Sie popen (), wenn Sie Daten in die Standardeingabe des Python-Skripts schreiben oder Daten aus der Standardausgabe des Python-Skripts in PHP lesen möchten. Mit popen () können Sie nur lesen oder schreiben, jedoch nicht beides. Wenn Sie beides möchten, checken Sie proc_open () aus. Bei der bidirektionalen Kommunikation zwischen Programmen müssen Sie jedoch vorsichtig sein, um Deadlocks zu vermeiden, bei denen jedes Programm darauf wartet, dass das andere etwas unternimmt.

Wenn Sie vom Benutzer bereitgestellte Daten an das Python-Skript übergeben möchten, müssen Sie vor allem auf die Befehlseingabe achten. Wenn Sie nicht vorsichtig sind, könnte Ihr Benutzer Ihnen Daten wie "; evilcommand;" senden. und Ihr Programm dazu bringen, willkürliche Befehle gegen Ihren Willen auszuführen.

escapeshellarg () und escapeshellcmd () kann dabei helfen, aber ich persönlich entferne alles, was kein bekannter guter Charakter ist, mit etwas wie

preg_replace('/[^a-zA-Z0-9]/', '', $str)
98
Andru Luvisi

Mit dem Operator backquote können Sie auch Python-Skripts mit ähnlicher Syntax wie oben ausführen

In einer Python-Datei namens python.py:

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

In einer PHP-Datei namens python.php:

$python = `python python.py`;
echo $python;
25
user

Es gibt auch eine PHP -Erweiterung: Pip - Python in PHP , die ich noch nie ausprobiert habe, aber gerade für ein solches Ereignis ein Lesezeichen hatte

15
enobrev

Sie können ein Python-Skript über PHP und Ausgaben im Browser ausführen.

Grundsätzlich müssen Sie das Python-Skript folgendermaßen aufrufen:

$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);

Hinweis: Wenn Sie time.sleep () in Ihrem Python-Code ausführen, werden die Ergebnisse nicht im Browser ausgegeben.

Um vollständige Codes zu erhalten, besuchen Sie Wie man ein Python-Skript von PHP aus ausführt und die Ausgabe auf Browser zeigt.

11
Idealmind

Ich mache so etwas immer für schnelle und schmutzige Skripte. Es ist durchaus üblich, ein CGI- oder PHP -Skript zu verwenden, das nur system/popen verwendet, um ein externes Programm aufzurufen.

Seien Sie besonders vorsichtig, wenn Ihr Webserver für das Internet insgesamt offen ist. Stellen Sie sicher, dass Sie Ihre GET/POST-Eingabe in diesem Fall bereinigen, damit Angreifer keine beliebigen Befehle auf Ihrem Computer ausführen können.

7
Eli Courtwright

Ihre call_python_file.php sollte so aussehen:

<?php
    $item='Everything is awesome!!';
    $tmp = exec("py.py $item");
    echo $tmp;
?>

Das führt das Python-Skript aus und gibt das Ergebnis an den Browser aus. __ Während die Variable (sys.argv [1:]) in Ihrem Python-Skript alle Ihre Argumente enthält. So zeigen Sie das Argument als Zeichenfolge an, von wo aus Sie Ihre PHP-Datei abrufen möchten, wenn Sie einen Textbereich erstellen möchten:

import sys

list1 = ' '.join(sys.argv[1:])

def main():
  print list1

if __== '__main__':
    main()
2
Aze

Beachten Sie, dass Sie, wenn Sie eine virtuelle Umgebung verwenden (wie beim Shared Hosting), Ihren Pfad auf Python einstellen müssen, z. B. /home/user/mypython/bin/python ./cgi-bin/test.py

0
Bob3411

Die obigen Methoden scheinen komplex zu sein. Verwenden Sie meine Methode als Referenz.

Ich habe diese zwei Dateien

run.php

mkdir.py

Hier habe ich eine HTML-Seite erstellt, die die GO-Schaltfläche enthält. Wenn Sie diese Schaltfläche drücken, wird ein neuer Ordner in dem Verzeichnis erstellt, dessen Pfad Sie angegeben haben.

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
Smshrimant