Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
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: 5846
[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: 5846
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: 5846
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: 5846
Grazie delle risposte. Ho risolto.
Unrue è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
SpaceX Starship: Ship 37 ha eseguito due...
Sharkoon punta sui case a basso costo, m...
La tua rete Wi-Fi fa pena? Questi FRITZ!...
Amazon, un weekend di fuoco per gli scon...
Ancora 3 smartwatch Amazfit in forte sco...
Sharkoon A60 RGB: dissipatore ad aria du...
HONOR 400 Pro a prezzo bomba su Amazon: ...
Offerte da non perdere: robot aspirapolv...
Apple Watch e Galaxy Watch ai minimi sto...
Il rover NASA Perseverance ha ''raccolto...
NASA e ISRO hanno lanciato il satellite ...
Switch 2 ha venduto 5,82 milioni di cons...
Assassin's Creed Black Flag Remake: le m...
Cosa ci fa una Xiaomi SU7 Ultra alle por...
Promo AliExpress Choice Day: prezzi stra...
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: 05:23.


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