使用java Runtime.getRunTime.exec()的交互式命令
如何使用Runtime.getRunTime.exec()发送和接收多个输入 例如,如果我想运行openSSL之类的程序来生成csr,它会要求提供州、市、通用名等信息。。等等使用java Runtime.getRunTime.exec()的交互式命令,java,android,command-line,openssl,certificate,Java,Android,Command Line,Openssl,Certificate,如何使用Runtime.getRunTime.exec()发送和接收多个输入 例如,如果我想运行openSSL之类的程序来生成csr,它会要求提供州、市、通用名等信息。。等等 Process p = Runtime.getRuntime().exec(cmd); OutputStream out = p.getOutputStream(); //print stuff p.getInputStream(); //Now i want to send some inputs out.write
Process p = Runtime.getRuntime().exec(cmd);
OutputStream out = p.getOutputStream();
//print stuff p.getInputStream();
//Now i want to send some inputs
out.write("test".getBytes());
//flush and close??? don't know what to do here
//print what ever is returned
//Now i want to send some more inputs
out.write("test2".getBytes());
//print what ever is returned.. and so on until this is complete
为什么不使用p.getInputStream()来读取需要发送的内容
使用out.write()相应地发送数据
为什么不使用
p.getInputStream().read()
读取需要发送的内容,同时使用out.write()
发送相应的数据
以下是一个例子:
这正是我想做的,但似乎书写工作不正常。我会用更多的解释来更新这个问题。这是可行的,我以前试过使用flush,但我尝试了很多不同的东西,我一定是搞砸了其他东西,导致它不起作用。谢谢
Process p = Runtime.getRuntime().exec(cmd);
OutputStream out = p.getOutputStream();
//print stuff p.getInputStream();
out.write("test".getBytes());
out.close(); //if i don't close, it will just sit there
//print stuff p.getInputStream();
out.write("test".getBytes()); // I can no longer write at this point, maybe because the outputstream was closed?
String line;
OutputStream stdin = null;
InputStream stderr = null;
InputStream stdout = null;
// launch EXE and grab stdin/stdout and stderr
Process process = Runtime.getRuntime ().exec ("/folder/exec.exe");
stdin = process.getOutputStream ();
stderr = process.getErrorStream ();
stdout = process.getInputStream ();
// "write" the parms into stdin
line = "param1" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "param2" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
line = "param3" + "\n";
stdin.write(line.getBytes() );
stdin.flush();
stdin.close();
// clean up if any output in stdout
BufferedReader brCleanUp =
new BufferedReader (new InputStreamReader (stdout));
while ((line = brCleanUp.readLine ()) != null) {
//System.out.println ("[Stdout] " + line);
}
brCleanUp.close();
// clean up if any output in stderr
brCleanUp =
new BufferedReader (new InputStreamReader (stderr));
while ((line = brCleanUp.readLine ()) != null) {
//System.out.println ("[Stderr] " + line);
}
brCleanUp.close();