[英]Interactive commands using java Runtime.getRunTime.exec()
How can I send and receive multiple inputs using Runtime.getRunTime.exec(). 如何使用Runtime.getRunTime.exec()发送和接收多个输入。
For example if I wanted to run something such as openSSL to generate a csr, it will ask for things such as state, city, common name.. and so on. 例如,如果我想运行诸如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("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
why not use p.getInputStream() to read what you need to send while using out.write() to send data accordingly.
为什么不使用p.getInputStream()来读取需要发送的内容,而使用out.write()来相应地发送数据呢?
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?
why not use p.getInputStream().read()
to read what you need to send while using out.write()
to send data accordingly. 为什么不使用
p.getInputStream().read()
来读取需要发送的内容,而使用out.write()
来相应地发送数据呢?
here is an example taken from: http://www.rgagnon.com/javadetails/java-0014.html 这是一个取自以下示例: http : //www.rgagnon.com/javadetails/java-0014.html
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.