Java e comandi Bash

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
MDS
Linux 1.x
Linux 1.x
Messaggi: 178
Iscritto il: gio 20 mag 2004, 0:00

Java e comandi Bash

Messaggio 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>

gianPrazio
Linux 2.x
Linux 2.x
Messaggi: 388
Iscritto il: mer 29 set 2004, 0:00
Località: Castelfranco Veneto

Java e comandi Bash

Messaggio 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>

MDS
Linux 1.x
Linux 1.x
Messaggi: 178
Iscritto il: gio 20 mag 2004, 0:00

Java e comandi Bash

Messaggio 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>

gianPrazio
Linux 2.x
Linux 2.x
Messaggi: 388
Iscritto il: mer 29 set 2004, 0:00
Località: Castelfranco Veneto

Java e comandi Bash

Messaggio 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>

MDS
Linux 1.x
Linux 1.x
Messaggi: 178
Iscritto il: gio 20 mag 2004, 0:00

Java e comandi Bash

Messaggio 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>

gianPrazio
Linux 2.x
Linux 2.x
Messaggi: 388
Iscritto il: mer 29 set 2004, 0:00
Località: Castelfranco Veneto

Java e comandi Bash

Messaggio 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... :-D
<BR>Se trovo qualche altro metodo per stampare l´output di un comando bash su standard output, te lo faccio sapere.
<BR>Ciaoz<br>

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Java e comandi Bash

Messaggio 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>

kyakan
Linux 2.x
Linux 2.x
Messaggi: 209
Iscritto il: sab 1 gen 2005, 0:00
Contatta:

Java e comandi Bash

Messaggio 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>

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Java e comandi Bash

Messaggio 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>

Avatar utente
rob
Linux 3.x
Linux 3.x
Messaggi: 924
Iscritto il: lun 22 nov 2004, 0:00
Località: Roma

Java e comandi Bash

Messaggio 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>

Avatar utente
useless
Staff
Staff
Messaggi: 3896
Iscritto il: dom 12 ott 2003, 0:00
Località: A place where the streets have no name
Contatta:

Java e comandi Bash

Messaggio da useless »

prova le GTK (che sono comunque OO) poi ne riparliamo :-).<br>

Avatar utente
rob
Linux 3.x
Linux 3.x
Messaggi: 924
Iscritto il: lun 22 nov 2004, 0:00
Località: Roma

Java e comandi Bash

Messaggio da rob »

ok, le proverò e ti farò sapere ;-)
<BR>
<BR>ciao, rob<br>

MDS
Linux 1.x
Linux 1.x
Messaggi: 178
Iscritto il: gio 20 mag 2004, 0:00

Java e comandi Bash

Messaggio 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>

MDS
Linux 1.x
Linux 1.x
Messaggi: 178
Iscritto il: gio 20 mag 2004, 0:00

Java e comandi Bash

Messaggio 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>

Avatar utente
rob
Linux 3.x
Linux 3.x
Messaggi: 924
Iscritto il: lun 22 nov 2004, 0:00
Località: Roma

Java e comandi Bash

Messaggio 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>

Rispondi