Sie können die PIPE nicht innerhalb von Runtime.getRuntime().exec()
verwenden wie in deinem Beispiel. PIPE ist Teil der Shell.
Sie könnten beides tun
- Schreiben Sie Ihren Befehl in ein Shell-Skript und führen Sie dieses Shell-Skript mit
.exec()
aus 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);
@ Alpers Antwort sollte funktionieren. Besser noch, verwenden Sie überhaupt kein Shell-Skript und keine Umleitung. Sie können das Passwort direkt in die stdin des Prozesses schreiben, indem Sie den (verwirrend benannten) Process.getOutputStream()
verwenden .
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();
Sie würden Schlimmeres tun, als zu versuchen, Jython einzubetten und Ihr 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. Dadurch entsteht kein zusätzlicher Prozess.