|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
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) { } } } 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. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Prova a stampare cmdin che è il PrintStream.
ciao ![]() |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 5846
|
Quote:
![]() java.io.PrintStream@10b62c9 |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
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 ![]() |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 5846
|
Quote:
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. |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
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); } System.out.println("\n\nCodice di uscita: " + p.waitFor());
__________________
|Java Base| |
![]() |
![]() |
![]() |
#7 |
Senior Member
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%) |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Jul 2002
Messaggi: 4334
|
Quote:
__________________
|Java Base| |
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 5846
|
Grazie delle risposte. Ho risolto.
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:23.