Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla
DJI ha appena ufficializzato la serie Lito, la sua nuova gamma di droni entry-level destinata a chi si avvicina per la prima volta alla fotografia aerea. Al centro dell'annuncio ci sono due modelli ben distinti per fascia di prezzo e specifiche tecniche: DJI Lito 1 e DJI Lito X1. Entrambi si collocano sotto la soglia regolamentare dei 249 grammi, che permette di volare con requisiti burocratici più semplici rispetto ai droni più pesanti.
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi
Siamo stati a Londra per la premiazione dei Sony World Photography Awards 2026, l'evento a tema fotografia più prestigioso. Fra sorprese e novità, ne approfittiamo per fare il punto sulla fotografia contemporanea, in cui la didascalia è sempre più necessaria a cogliere il senso della quasi totalità degli scatti.
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince
L'elettrica di casa Hyundai propone una versione AWD con estetica derivata dalla famiglia N. L'abbiamo provata per diversi giorni, per scoprire tutti i dettagli e la vera autonomia in autostrada
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-12-2006, 15:16   #1
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6922
[Java] Eseguire comandi da shell

Salve, ho bisogno di eseguire da un programma Java un comando da console. Ad esempio quello che fa venire la versione della jdk ovvero java -version. A tal proposito ho scritto:

Codice:
package comandi;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;

public class Comandi {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Process cmd;
		String[] a= {"/bin/sh","java","-version"};
		try{
		cmd = Runtime.getRuntime().exec(a);
		PrintStream cmdin = new PrintStream(new BufferedOutputStream(
		cmd.getOutputStream()));
        System.out.println(cmd.toString());
		DataInputStream cmdout = new DataInputStream(new BufferedInputStream(
		cmd.getInputStream()));
		}
		catch (IOException e)
		{
			
		
		}
	}

}
Ma come output ottengo:

java.lang.UNIXProcess@10b62c9

Cosa vuol dire? Probabilmente sbaglio a passare i comandi in quel modo. In realtà il mio comando deve poi richiamare un programma, ma adesso per imparare gli sto mandando comandi di shell semplici. Grazie.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2006, 16:31   #2
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Prova a stampare cmdin che è il PrintStream.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2006, 19:54   #3
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6922
Quote:
Originariamente inviato da VICIUS
Prova a stampare cmdin che è il PrintStream.

ciao
Già provato,cambia solo il messaggio di output :

java.io.PrintStream@10b62c9
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2006, 20:15   #4
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Guardando su qualche esempio online dice di ricordarsi di chiudere lo stream con la close(). Purtroppo non ho java sotto mano e più di cosi non posso aiutarti

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2006, 20:51   #5
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6922
Quote:
Originariamente inviato da VICIUS
Guardando su qualche esempio online dice di ricordarsi di chiudere lo stream con la close(). Purtroppo non ho java sotto mano e più di cosi non posso aiutarti

ciao

Allora, ci sono quasi.
Il comando che inserisco è questo:

String[] a= {"sh","-c","java","-version"};

Però non mi prende l'argomento "-version" , mi esegue il comando java e mi dà tutta la lista dei possibili argomenti.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2006, 09:07   #6
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Come comando basta una stringa:
String a = "java -version";

Poi per leggere lo stdout - similmente per stderr - devi fare:
BufferedReader brSTDOUT = new BufferedReader(new InputStreamReader(p.getInputStream()));
(non e' necessario il wrap Buffered, comunque...)

Per stamparlo:

Codice:
String s;
        while(true) {
            s = brSTDOUT.readLine();
            if(s == null)
                break;
            System.out.println(s);
        }
Se vuoi anche il codice di uscita:

System.out.println("\n\nCodice di uscita: " + p.waitFor());
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2006, 12:49   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Ecco una possibile soluzione per "catturare" l'output del processo avviato (nell'esempio java -version su Windows):

Codice:
import java.io.*;
import java.util.regex.*;

public class Prova
{
    public static void main (String[] args)
    {
        try
        {
            Runtime rt = Runtime.getRuntime ();
            Process proc = rt.exec (new String[] { "cmd", "/C", "java", "-version" });

            InputStreamGrabber isgOut = new InputStreamGrabber (proc.getInputStream ());
            InputStreamGrabber isgErr = new InputStreamGrabber (proc.getErrorStream ());

            int exitVal = proc.waitFor ();

            Pattern pattern = Pattern.compile ("java version \"(.*)\"", Pattern.DOTALL);
            Matcher matcher = pattern.matcher (isgErr.getString ());

            if (matcher.find ())
                System.out.println ("Versione di Java: " + matcher.group (1));
        }
        catch (Exception e)
        {
            System.out.println (e);
        }
    }
}


class InputStreamGrabber implements Runnable
{
    private InputStream is;
    private StringBuffer sb;

    public InputStreamGrabber (InputStream is)
    {
        this.is = is;
        sb = new StringBuffer ();

        new Thread (this).start ();
    }

    public void run ()
    {
        try
        {
            InputStreamReader isr = new InputStreamReader (is);

            char[] buf = new char [256];
            int len;

            while ((len = isr.read (buf)) != -1)
                sb.append (buf, 0, len);
        }
        catch (Exception e)
        {
            System.out.println (e);
        }
        finally
        {
            try {
                is.close ();
            } catch (Exception e) { }
        }
    }

    public String getString ()
    {
        return sb.toString ();
    }
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2006, 12:52   #8
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Quote:
Originariamente inviato da lovaz
...
(non e' necessario il wrap Buffered, comunque...)
...
Anzi si', se vuoi usare readLine().
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 07-12-2006, 13:00   #9
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6922
Grazie delle risposte. Ho risolto.
Unrue è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI Lito 1 e Lito X1 recensione: i nuovi droni per principianti che non si fanno mancare nulla DJI Lito 1 e Lito X1 recensione: i nuovi droni p...
Sony World Photography Awards 2026: i premiati, anche italiani, il punto sulla fotografia di oggi Sony World Photography Awards 2026: i premiati, ...
Una settimana con Hyundai Ioniq 5 N-Line: diverte e convince Una settimana con Hyundai Ioniq 5 N-Line: divert...
Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo Recensione OPPO Find X9 Ultra: è lui il c...
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet Ecovacs Deebot X12 OmniCyclone: lava grazie a Fo...
Xbox Game Pass sarà disponibile a...
La serie HONOR 600 avrà presto un...
Mova Viax 250 in prova: il robot tagliae...
Fat e-bike per tutti: sconti Engwe, pi&u...
Google conferma l'arrivo della nuova ver...
Apple ha trovato il modo per abbassare i...
OpenAI vuole tassare l'AI per dare a tut...
MacBook Air 15'' con chip M4 a 1.199€ su...
Samsung Galaxy S25 Edge 12/512GB a 854€ ...
Super offerta sul portatile gaming Acer ...
Nanotubi di carbonio più conduttivi del ...
LG OLED evo C5 48'' a 614€ e G5 83' a 3....
Ricavi record per Samsung ma la division...
TOP 7 Amazon del weekend: gli sconti al ...
Volvo e Design Week: al Volvo Studio di ...
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: 00:41.


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