Интерактивные команды, использующие java Runtime.getRunTime.exec () - PullRequest
2 голосов
/ 22 февраля 2012

Как я могу отправлять и получать несколько входов, используя 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("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 () для соответствующей отправки данных.

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 Ответ

1 голос
/ 22 февраля 2012

почему бы не использовать p.getInputStream().read() для чтения того, что вам нужно отправить, при использовании out.write() для соответствующей отправки данных.

вот пример, взятый из: 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...