Ho bisogno di lanciare un'applicazione linux da una classe java. Devo poter fornire dei parametri in input e devo ricevere l'output da questa stessa applicazione. Come si può redirigere l'input e l'output?
Ho bisogno di lanciare un'applicazione linux da una classe java. Devo poter fornire dei parametri in input e devo ricevere l'output da questa stessa applicazione. Come si può redirigere l'input e l'output?
Mi rispondo da solo
codice:public static void main(String[] args) { try { String line; Process p = Runtime.getRuntime().exec ("/usr/bin/zenity"); BufferedReader input = new BufferedReader (new InputStreamReader(p.getErrorStream())); while ((line = input.readLine()) != null) { System.out.println(line); } input.close(); } catch (Exception err) { err.printStackTrace(); } }
C'è un poblema.
Nel momento in cui lancio l'applicazione, io ho bisogno di conoscere il suo output (tramite redirezione).
Con questa riga lancio l'applicazione
e con questa redirigo l'outputcodice:Process p = Runtime.getRuntime().exec("/usr/bin/zenity");
ma ormai l'output è stato gia prodotto dall'applicazione e quando leggo input non c'è più niente da leggere. C'è un modo per assegnare prima le redirezioni e poi avviare il processo? O sbaglio io?codice:BufferedReader input = new BufferedReader(new InputStreamReader(p.getErrorStream()));
L'output lo redirigi con
codice:BufferedReader input = new BufferedReader(new InputStreamReader(p.getOutputStream()));
ma l'outputStream non è relativo all'applicazione chiamante?
La mia applicazione scrive nell'outputStream che a sua volta è lo STDIN dell'applicazione chiamata. O mi sbaglio?
Si, scusa. Ero di fretta ieri sera e' ho invertito gli stream.
Dal primo leggi i dati, nel secondo li inserisci se il tuo programma si aspetta dei dati in ingresso.codice:BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream())); PrintWriter writer = new PrintWriter(new OutputStreamWriter(p.getOutputStream()));