Quote:
Originariamente inviato da agente mm8
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