Pagina 1 di 2
Java e comandi Bash
Inviato: dom 23 gen 2005, 1:51
da MDS
Ciao a tutti.
<BR>Vorrei farmi una piccola interfaccia grafica in java per l´utilizzo di swaret.
<BR>Niente di complicato o utile.... in realtà lo vorrei fare per sparimentare.
<BR>In java non dovrei aver problemi, l´unico intoppo riguarda il passagio dei comandi dal mio programma al sistema operativo....
<BR>Es: Voglio passare dal mio programma java il seguente comando al sistema:
<BR>
<BR><!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>
<BR>swaret --update
<BR></PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->
<BR>
<BR>Cosa banale.... però al sistema come faccio a passarglielo....
<BR>
<BR>Grazie tante, su google non ho trovato la risposta, probabilmente perchè non ho cercato bene....
<BR>
<BR>Ciao

<br>
Java e comandi Bash
Inviato: dom 23 gen 2005, 3:00
da gianPrazio
Di solito dovresti usare la classe Runtime, per lanciare i comandi del sistema operativo: in pratica ottieni l´oggetto di tipo Runtime con il metodo statico getRuntime():
<BR>
<BR><code>Runtime oggetto = Runtime.getRuntime();</code>
<BR>
<BR>Successivamente, utilizzi il metodo exec(String command) della classe Runtime per eseguire i comandi che desideri:
<BR>
<BR><code>oggetto.exec(swaret --update);</code>
<BR>
<BR>Se hai Java 1.5.0, puoi trovare un riassunto dei metodi della classe Runtime (e non solo) <a href=
http://java.sun.com/j2se/1.5.0/docs/api/>qui</a>.
<BR>Spero di esserti stato utile.
<BR>Ciao
<BR><BR><BR>[ Questo Messaggio è stato Modificato da: gianPrazio il 23-01-2005 03:01 ]<br>
Java e comandi Bash
Inviato: dom 23 gen 2005, 10:57
da MDS
Grazie Gian, era quello che volevo sapere....
<BR>D´altra parte ho saltato la prima documentaione di ricerca Le Api Java (javadoc)
<BR>
<BR>Tanx

<br>
Java e comandi Bash
Inviato: dom 23 gen 2005, 11:37
da gianPrazio
Figurati, MDS... il fatto e´ che con le classi di Java e´ mooolto facile perdersi: ce ne sono troppe! Leggersi tutta la documentazione e´ impensabile...
<BR>A, comunque, scusa... l´argomento del metodo exec deve essere una stringa e per cui la sintassi corretta e´:
<BR>
<BR><code>oggetto.exec("swaret --update");</code>
<BR>
<BR>e non
<BR>
<BR><code>oggetto.exec(swaret --update);</code> ....
<BR>
<BR>Saranno stati i fumi dell´alcool a indurmi in errore, ieri notte... :-]
<BR>ciaoz<br>
Java e comandi Bash
Inviato: dom 23 gen 2005, 14:12
da MDS
Grazie tante, ma leggendo la documentazione me ne ero accorto dell´imprecisione.... comunque era il concetto che mi interessava.
<BR>
<BR>Volevo anche catturare l´otput del comando bash in esecuzione....
<BR>Così a spanne credevo di fare ciò girando l´output bash su un file di testo e poi ogni mezzo secondo (tramite thread) fare una letttura da quel file e farmela stampare a video....
<BR>Che ne dici?
<BR>Secondo te c´è una via + semplice ed efficiente?
<BR>Ciao e grazie...

<br>
Java e comandi Bash
Inviato: dom 23 gen 2005, 15:05
da gianPrazio
Quella di usare dei Thread potrebbe essere una soluzione.... in questo momente non me ne vengono in mente di alternative... e´ molto tempo che non Javo...

<BR>Se trovo qualche altro metodo per stampare l´output di un comando bash su standard output, te lo faccio sapere.
<BR>Ciaoz<br>
Java e comandi Bash
Inviato: dom 23 gen 2005, 15:42
da useless
x fare una roba simile in C userei la funzione popen(), magari java ha qualcosa di simile, prova a cercare popen nella documentazione.
<BR>altrimenti puoi ridirigere lo stdout/err su un file e poi leggere quello, ma non è il max della vita.<br>
Java e comandi Bash
Inviato: dom 23 gen 2005, 16:13
da kyakan
Allora la cosa non è molto lontana da quello che gia ti è stato consigliato.
<BR>
<BR><!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>
<BR>...
<BR>Runtime runtime = Runtime.getRuntime() ;
<BR>Process swaret = runtime.exec("swaret --update");
<BR>InputStream swout = swaret.getInputStream();
<BR>BufferedReader buff = new BufferedReader(new InputStreamReader(swout));
<BR>String linea = null;
<BR>while((linea = buff.readLine()) != null)
<BR>{// Un ciclo per ogni linea `linea`
<BR> System.out.println(linea);
<BR>}
<BR>...
<BR></PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End -->
<BR>
<BR>Dovrebbe funzionare..
<BR>Naturalmente io ho utilizzato lo BuferedReader che è comodo per le letture di testo, ma puoi utilizzare lo stream che piu ti serve..forse in questo caso è proprio questo il piu` utile.
<BR>
<BR>
<BR><br>
Java e comandi Bash
Inviato: dom 23 gen 2005, 18:27
da useless
se a qualcuno servisse in C:
<BR><!-- BBCode Quote Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Quote:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><BLOCKQUOTE>
<BR>FILE *fp;
<BR>char buf[MAX_BUF];
<BR>
<BR>fp = popen ("swaret --update", "r");
<BR>while (fgets (buf, MAX_BUF, fp) != EOF)
<BR>printf ("%s", buf);
<BR>pclose (fp);
<BR></BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode Quote End -->
<BR>fatevi un´idea di cos´è java e cosa il c...<br>
Java e comandi Bash
Inviato: dom 23 gen 2005, 21:06
da rob
useless, tu hai 3000 ragioni, il c è + elegante, + pratico, + veloce (nell´esecuzione)... ma se devi scrivere un´interfaccia grafica java è un attimino + potente...
<BR>
<BR>bye, rob<br>
Java e comandi Bash
Inviato: dom 23 gen 2005, 21:48
da useless
prova le GTK (che sono comunque OO) poi ne riparliamo

.<br>
Java e comandi Bash
Inviato: dom 23 gen 2005, 22:21
da rob
ok, le proverò e ti farò sapere
<BR>
<BR>ciao, rob<br>
Java e comandi Bash
Inviato: lun 24 gen 2005, 10:00
da MDS
Grazie a tutti per l´aiuto.
<BR>Poi quando l´ho finita avrei piacere di farvi provare l´interfaccia.
<BR>
<BR>Ciao

<br>
Java e comandi Bash
Inviato: mer 9 feb 2005, 19:26
da MDS
Ciao a tutti di nuovo.
<BR>Ho quasi finito l´interfaccia grafica per Swaret....
<BR>Riesco a passargli il comando e a visualizzarne l´output (tipo update, list).
<BR>I problemi si verificano invece sull´install, quando invece viene richiesta interattività. Mi spiego io ho previsto un field dove inserire le risposte richieste ed un bottone per poter passare al sistema le risposte, solo che quando lancio l´install il programma si blocca sulla domanda di voler installare o no un pacchetto (in realtà la domanda non me la fa nemmeno visualizzare).
<BR>Il codice dei comandi è il seguente. Ovviamnete ci sono altre classi per la grafica e per la gestione degli eventi.
<BR>Che ne dite?
<BR>
<BR><!-- BBCode Start --><TABLE BORDER=0 ALIGN=CENTER WIDTH=85%><TR><TD><font size=-1>Code:</font><HR></TD></TR><TR><TD><FONT SIZE=-1><PRE>
<BR>try
<BR> {
<BR>
<BR>
<BR> Process ls = runtime.exec(command);
<BR> InputStream lsOut = ls.getInputStream();
<BR> BufferedReader buff = new BufferedReader(new InputStreamReader(lsOut));
<BR> String linea = null;
<BR>
<BR> while((linea = buff.readLine()) != null)
<BR>
<BR> {// Un ciclo per ogni linea `linea`
<BR> GuiManager.setContenutoAreaTestoGui(linea);
<BR> //System.out.println(linea);
<BR> }
<BR> //linea = buff.readLine();
<BR> }
<BR>
<BR> catch (Exception e)
<BR> {
<BR> e.printStackTrace();
<BR> }
<BR></PRE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE><!-- BBCode End --><br>
Java e comandi Bash
Inviato: mer 9 feb 2005, 19:41
da rob
se da interfaccia grafica riesci a selezionare univocamente il pacchetto che si deve installare/rimuovere/aggornare, puoi lanciare swaret con l´opzione -a (auto), del genere:
<BR>swaret --install zlib -a
<BR>
<BR>ciao, rob
<BR>
<BR>p.s. saluta anche tuo fratello :-] <br>