Wie zum ausführen von Python-Skript aus Java?
Kann ich ausführen, Linux-Befehle wie ls
oder pwd
von Java ohne Probleme, aber konnte nicht ein Python-script ausgeführt.
Dies 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 passiert. Es erreichte SENDEN, aber es hörte auf zu nach es...
Ich versuche, ein Skript auszuführen, das braucht root-Rechte, weil es benutzt den seriellen port. Auch habe ich, um eine Zeichenfolge übergeben, die mit einigen Parametern (Paket).
ist dein python-Skript zu schreiben somethong, um es von standard aus?
Was ist mit den Apache commons exec ?
Was ist mit den Apache commons exec ?
InformationsquelleAutor Biribu | 2013-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht mit dem ROHR im inneren des
Runtime.getRuntime().exec()
wie Sie in Ihrem Beispiel. ROHR ist Teil der shell.Könnten Sie tun, entweder
.exec()
oderKönnen Sie etwas tun, die der folgenden ähnelt
Diese Antwort funktioniert auch ohne erstellen eines shell-Skript-Datei. Einfach kopieren-einfügen in Ihren code ein.
Ja, es funktioniert, aber ich konnte es sich nicht erklären deutlich vor. Ich aktualisiert die post, ich hoffe, es jetzt besser.
Es funktioniert! vielen, vielen Dank!
Ich habe zwei python-Versionen laufen in meinem system. eine der Standard ein, für die ich eingestellt habe das env-path-variable, die andere ist aus anaconda-Paket, das ist in anderen Ort, zum Beispiel (c:/Users/Nitesh/appdata/anaconda/python.exe) ich will diese python, die von anaconda zum ausführen des python-Skripte durch java. Was sollte ich ihm in dem array von string cmd. Ich habe versucht, die änderung der 2-element (-c) auf den vollständig qualifizierten Pfad meiner anaconda python, Es hat nicht funktioniert noch.
InformationsquelleAutor Alper
@Alper die Antwort sollte funktionieren. Noch besser, wenn nicht, verwenden Sie ein shell-Skript, und die Umleitung auf allen. Schreiben Sie das Passwort direkt an den Prozeß' stdin mit (verwirrenderweise den Namen)
Process.getOutputStream()
.ja, das ist Betriebssystemunabhängig.
InformationsquelleAutor jtahlborn
Sie noch schlimmer machen würde, als zu versuchen, jython-embedding und bei der Ausführung Ihrer Skripts. Ein einfaches Beispiel soll helfen:
Wenn Sie weitere Hilfe benötigen, lassen Sie einen Kommentar. Dies bedeutet nicht, erstellen Sie einen zusätzlichen Prozess.
InformationsquelleAutor hd1