Nemůžete použít PIPE uvnitř Runtime.getRuntime().exec()
jak to děláte ve svém příkladu. PIPE je součástí pláště.
Můžete udělat obojí
- Vložte příkaz do skriptu prostředí a spusťte tento skript pomocí příkazu
.exec()
nebo -
Můžete udělat něco podobného následujícímu
String[] cmd = { "/bin/bash", "-c", "echo password | python script.py '" + packet.toString() + "'" }; Runtime.getRuntime().exec(cmd);
@Alperova odpověď by měla fungovat. Ještě lépe však nepoužívejte shellový skript a přesměrování vůbec. Heslo můžete zapsat přímo do stdin procesu pomocí (chybně pojmenovaného) 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();
Udělali byste horší, než abyste zkusili vložit jython a spustit svůj skript. Měl by pomoci jednoduchý příklad:
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");
Pokud potřebujete další pomoc, zanechte komentář. Tím se nevytvoří další proces.