Interactive commands using java Runtime.getRunTime

2019-05-21 09:36发布

How can I send and receive multiple inputs using 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.

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.

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? 

1条回答
迷人小祖宗
2楼-- · 2019-05-21 09:55

why not use p.getInputStream().read() to read what you need to send while using out.write() to send data accordingly.

here is an example taken from: 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();
查看更多
登录 后发表回答