Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-05-2009, 10:59   #1
LimiT-MaTz
Senior Member
 
Iscritto dal: Apr 2003
Città: Genova
Messaggi: 673
[JAVA] Process exec

Buongiorno,

vi spiego brevemente quello che vorrei realizzare.
ho un programma 'X' (testuale) da cui devo raccogliere l'output da un programma java.
il programma 'X' non è oneshot ma rimane in esecuzione finchè non lo killo ( è uno sniffer ).

Mi interesserebbe creare un wrapper in java che mi permettesse tramite 2 metodi di eseguire il programma:
public void start() => fa partire il programma
public void stop() => ferma l'esecuzione e ritorna l'output ( stdout o eccezzione nel caso vi sia stata un return != 0 quando ho fatto partire il programma).

Il tutto dovrebbe essere eseguito su un Thread.

Ora vi espongo quanto realizzato e i problemi riscontrati.
Leggendo la doc ho trovato la funzione exec che mi permette di eseguire su un Thread un 'programma' e di avere a disposizione i 3 stream (stdin stdout stderr) .
perfetto, non mi sembra neanche vero, è quello che fa al caso mio.

nel metodo start() => faccio partire la exec.
nel metodo stop() => verifico che il processo creato non sia uscito. Se è uscito sarà probabilmente un errore altrimenti se è ancora in esecuzione non ci sono problemi.Fatte queste considerazioni mi verrebbe l'idea di prendermi l'stdout o stderr ( dipende da exit ) e leggerne il contenuto e sucessivamente invocare una proc.destroy() ( per killare il processo ).

Ecco che spuntano i problemi, quando chiamo la stop, nello stream (stdout) non trovo nulla. Come se il programma non avesse scritto nulla in output ( cosa non vera ).

La cosa interessante è che cambio programma con uno oneshot (esempio ls) il sistema funziona. Mi è venuto il dubbio che i dati fossero disponibili solo quando il processo è terminato.Allora ho provato a terminare il processo con destroy, ma cosi' facendo perdo anche gli stream.

vi incollo il codice per essere piu' chiaro
Codice:
		public void start(){
			try{  
					ProcessBuilder pb = new ProcessBuilder(binpath);
					proc = pb.start();

			}
			catch (IOException e)  
			{  
				System.err.println("exec error: " + e);  
			}  
		}
		public String terminate(){
			String result = "";
			int exit = 0;
			try
			{
				exit = proc.exitValue();
			}
			catch (IllegalThreadStateException e) {
				exit = 0;
			}
			if(exit == 0){
				InputStream in = proc.getInputStream();
				result = convertStreamToString(in);
				System.out.println(result);
				proc.destroy();
			}
			else{
				InputStream in = proc.getErrorStream();   
				System.out.println(convertStreamToString(in));
				throw new RuntimeException();
			}
			return result;
		}
		 public String convertStreamToString(InputStream is) {
		        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
		        StringBuilder sb = new StringBuilder();
		 
		        String line = null;
		        try {
		            while ((line = reader.readLine()) != null) {
		                sb.append(line + "\n");
		            }
		        } catch (IOException e) {
		            e.printStackTrace();
		        } finally {
		            try {
		                is.close();
		            } catch (IOException e) {
		                e.printStackTrace();
		            }
		        }
		        return sb.toString();
		    }

}
avreste qualche consiglio da darmi? grazie
__________________
MaTz!
LimiT-MaTz è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Ubisoft conferma due nuovi Far Cry in sv...
Chi vincerà il Festival di Sanrem...
G42 e Cerebras portano in India un super...
Offerte aggiornate del weekend Amazon: 7...
4 MacBook Air in offerta e scende a 939€...
Chrome cambia il tuo modo di lavorare: o...
Minimo storico iPhone 17 su Amazon: 909€...
USA, incriminati tre ingegneri della Sil...
Xbox: Phil Spencer lascia dopo 38 anni, ...
Cuffie e sostanze chimiche: uno studio e...
Terremoto sui dazi USA: la Corte Suprema...
Arianespace potrebbe lanciare il primo r...
Google Pixel 10a disponibile al prezzo m...
Microsoft Copilot nei guai: email riserv...
AOC a 399€ su Amazon: QD-OLED 240 Hz e 0...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:52.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v