Runtime.getRuntime().exec()
内で PIPE を使用することはできません あなたの例で行うように。 PIPE はシェルの一部です。
どちらでも構いません
- コマンドをシェル スクリプトに入力し、そのシェル スクリプトを
.exec()
で実行します。 または -
次のようなことができます
String[] cmd = { "/bin/bash", "-c", "echo password | python script.py '" + packet.toString() + "'" }; Runtime.getRuntime().exec(cmd);
@Alperの答えはうまくいくはずです。ただし、シェル スクリプトとリダイレクトをまったく使用しないことをお勧めします。 (紛らわしい名前の) Process.getOutputStream()
を使用して、パスワードをプロセスの stdin に直接書き込むことができます。 .
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();
jython を埋め込んでスクリプトを実行するよりも悪いことをするでしょう。簡単な例が役に立ちます:
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");
さらにヘルプが必要な場合は、コメントを残してください。これにより、追加のプロセスが作成されることはありません。