Wie kann ich Python-Skript aus Java ausführen?

Ich kann Linux-Befehle wie ls oder pwd aus Java ohne Probleme ausführen, konnte aber kein Python-Skript ausgeführt werden.

Das ist mein Code:

 Process p; try{ System.out.println("SEND"); String cmd = "/bash/bin -c echo password| python script.py '" + packet.toString() + "'"; //System.out.println(cmd); p = Runtime.getRuntime().exec(cmd); BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); String s = br.readLine(); System.out.println(s); System.out.println("Sent"); p.waitFor(); p.destroy(); } catch (Exception e) {} 

Nichts ist passiert. Es hat SEND erreicht, aber es hielt einfach danach …

Ich versuche, ein Skript auszuführen, das Root-Berechtigungen benötigt, weil es seriellen Port verwendet. Außerdem muss ich einen String mit einigen Parametern (Paket) übergeben.

3 Solutions collect form web for “Wie kann ich Python-Skript aus Java ausführen?”

Du kannst den PIPE nicht innerhalb der Runtime.getRuntime().exec() wie du in deinem Beispiel machst. PIPE ist Teil der Schale.

Du könntest auch machen

  • Setzen Sie Ihren Befehl auf ein Shell-Skript und führen Sie das Shell-Skript mit .exec() oder
  • Sie können etwas Ähnliches wie das folgende tun

     String[] cmd = { "/bin/bash", "-c", "echo password | python script.py '" + packet.toString() + "'" }; Runtime.getRuntime().exec(cmd); 

@ Alper's Antwort sollte funktionieren. Besser noch, verwenden Sie nicht ein Shell-Skript und Umleitung überhaupt. Sie können das Passwort direkt an den Prozess 'stdin mit dem (verwirrend benannten) Process.getOutputStream() .

 Process p = Runtime.exec( new String[]{"python", "script.py", packet.toString()}); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(p.getOutputStream())); writer.write("password"); writer.newLine(); writer.close(); 

Du würdest schlimmer machen, als zu versuchen, Jython einzubetten und dein Skript auszuführen. Ein einfaches Beispiel soll helfen:

 ScriptEngine engine = new ScriptEngineManager().getEngineByName("python"); // Using the eval() method on the engine causes a direct // interpretataion and execution of the code string passed into it engine.eval("import sys"); engine.eval("print sys"); 

Wenn Sie weitere Hilfe benötigen, hinterlassen Sie einen Kommentar. Dies erzeugt keinen zusätzlichen Prozess.

  • Holen Sie sich Inhalte aus dem offenen Fenster in Linux
  • Python-dev Installationsfehler: ImportError: Kein Modul namens apt_pkg
  • Synchrones / asynchrones Verhalten von Python-Pipes
  • Was brauche ich, um Microsoft Access-Datenbanken mit Python zu lesen?
  • Wie python3 Befehl ausführen Python 3.6 statt 3.5?
  • Fehler: Befehl 'c ++' fehlgeschlagen mit Exit Status 1
  • Normalisieren Sie Pfade mit übergeordneten ".." Verzeichnissen in der Mitte in bash Skript
  • Fehlende GOMP_parallel oder GOMP_4.0 in (Docker) jupyter / all-spark-notebook: sowohl R als auch Python
  • Open () in Python erstellt keine Datei, wenn sie nicht existiert
  • Histogramm des Bildes "Black Ink Level" durch horizontale Achse
  • Wie kann man resizeable Fensterstatus in pygame erkennen und de-maximieren es in Linux?
  • Python ist die beste Programmiersprache der Welt.