Vous ne pouvez pas utiliser le PIPE à l'intérieur du Runtime.getRuntime().exec()
comme vous le faites dans votre exemple. PIPE fait partie du shell.
Vous pouvez faire l'un ou l'autre
- Placez votre commande dans un script shell et exécutez ce script shell avec
.exec()
ou -
Vous pouvez faire quelque chose de similaire à ce qui suit
String[] cmd = { "/bin/bash", "-c", "echo password | python script.py '" + packet.toString() + "'" }; Runtime.getRuntime().exec(cmd);
La réponse de @Alper devrait fonctionner. Mieux encore, n'utilisez pas du tout de script shell et de redirection. Vous pouvez écrire le mot de passe directement dans le stdin du processus en utilisant le (nom prêtant à confusion) 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();
Vous feriez pire que d'essayer d'intégrer jython et d'exécuter votre script. Un exemple simple devrait vous aider :
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");
Si vous avez besoin d'aide supplémentaire, laissez un commentaire. Cela ne crée pas de processus supplémentaire.