View Single Post
Old 21-01-2009, 13:32   #8
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da agente mm8 Guarda i messaggi
Ok, quindi deduco che dovrei prendermi la responsabilità di gestire i buffer di io del processo.
Ma per fare questo, come posso fare? Devo utilizzare un qualche metodo della classe Input/OutputStream?
Se fai una ricerca nel Forum con le parole chiave [JAVA], exec, processo esterno, troverai già delle discussioni vecchie da consultare che ti chiariranno le idee.

Te ne posto una recentissima: http://www.hwupgrade.it/forum/showthread.php?t=1906195

Intanto visto che vuoi lanciare un processo esterno e collegarti ai suoi stream/buffer comincia col passare alla exec() gli argomenti in modo da creare e lanciare un solo processo.
Ad esempio:
Codice:
// lancia cmd forzando la visualizzazione della consolle
String[] cmdViewConsolle = {"cmd", "/K"};

// lancia cmd nascondendo la consolle: senza altri comandi non avrebbe senso perchè il processo terminerebbe subito dopo aver creato e nascosto la consolle
String[] cmdSlaveProcess = {"cmd", "/C", "applicativoEsternoConOutput.exe"};

// lancia cmd nascondendo la consolle, quindi lancia come processo con consolle dedicata (i buffer sono gestiti dal SO) "applicativoEsternoConOutput.exe"
String[] cmdAutoProcess = {"cmd", "/C", "start", "applicativoEsternoConOutput.exe"};

// lancia cmd nascondendo la consolle e manda in esecuzione il file myscript.bat: un altro esempio.
String[] cmdBatfile = {"cmd", "/C", "myscript.bat"};


// esempio: mandare in esecuzione un processo esterno che produce output su cui si vuole mettere le mani:
Process process = Runtime.getRuntime().exec(cmdSlaveProcess);
InputStream is = process.getInputStream();
OutputStream os = process.getOutputStream();

// usa gli stream come ti pare.
// ricordati che se il processo che hai lanciato con cmd è un applicativo che generà output devi svuotarne il buffer relativo, pena il rischio di saturamento del buffer stesso
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 21-01-2009 alle 13:34.
banryu79 è offline   Rispondi citando il messaggio o parte di esso