Non puoi usare il PIPE all'interno del Runtime.getRuntime().exec()
come fai nel tuo esempio. PIPE fa parte della shell.
Potresti fare entrambi
- Inserisci il tuo comando in uno script di shell ed esegui quello script di shell con
.exec()
o -
Puoi fare qualcosa di simile al seguente
String[] cmd = { "/bin/bash", "-c", "echo password | python script.py '" + packet.toString() + "'" }; Runtime.getRuntime().exec(cmd);
La risposta di @Alper dovrebbe funzionare. Meglio ancora, però, non usare affatto uno script di shell e il reindirizzamento. Puoi scrivere la password direttamente nello stdin del processo usando il (nome confuso) 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();
Faresti peggio che provare a incorporare jython ed eseguire il tuo script. Un semplice esempio dovrebbe aiutare:
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");
Se hai bisogno di ulteriore aiuto, lascia un commento. Questo non crea un processo aggiuntivo.