Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [JAVA]Comado System ... in java

    Scusate la domanda che probabilmente sarà mooolto fagiana, ma esiste un comando simile al System("nomecomando"); del C in JAVA?

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    Sai dirmi cosa fa questo comando in C?

  3. #3
    Già vero una domanda pertinente!

    richiama un comando del OS sottostante (credo sia solo per gli Unix!)

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Allora... in Java è possibile richiamare qualsiasi tipo di eseguibile mediante la classe Runtime:
    codice:
    Runtime r = Runtime.getRuntime();
    r.exec( <nome del file>);
    <nome del file> è una stringa con il percorso ed il nome del file da eseguire.

    Se intendi richiamare dei comandi interni (tipo DIR, CD...) non credo che sia possibile. Se qualcuno conosce un modo, sono ben lieto di apprenderlo!!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    fammi capire se voglio richiamare un programma di sistema come cd o ls non se ne parla ma se richiamo un eseguibile che io creo in C non ci sono problemi??

    Perchè se è così non ha molto senso! Dopotutto il mio eseguibile è tale quale a quelli di sistema, forse gli va dato il nome completo a partire dalla radice /!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Non è che non abbia senso: Java deve essere indipendente dalla piattaforma, quindi nessun legame con il sistema operativo in uso.

    Poi... in Linux un ls lo puoi richiamare perchè è un eseguibile... basta che tu gli dia il percorso completo, ma sotto Windows/DOS un DIR non lo chiamerai mai, in quanto è un comando interno (residente dentro a COMMAND.COM o CMD.EXE a seconda della versione di Win).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Originariamente inviato da LeleFT
    Allora... in Java è possibile richiamare qualsiasi tipo di eseguibile mediante la classe Runtime:
    codice:
    Runtime r = Runtime.getRuntime();
    r.exec( <nome del file>);
    <nome del file> è una stringa con il percorso ed il nome del file da eseguire.

    Se intendi richiamare dei comandi interni (tipo DIR, CD...) non credo che sia possibile. Se qualcuno conosce un modo, sono ben lieto di apprenderlo!!


    Ciao.



    per il fatto che java deve essere svincolato dalla piattaforma sono d'accordo, ma è una questione puramente "filosofica", dal momento in cui se ne ho bisogno posso comunque usare comandi proprietari di una piattaforma e perdere la portabilità... a mia scelta.

    comunque i comandi da te citati, nel caso di linux si possono richiamare perchè sono dei veri e propri files binari eseguibili che risiedono o in /usr/bin o in /bin o in /usr/sbin o in /sbin...
    quindi anche il vdir, ls, find, grep, chmod... qualsiasi comando della shell può essere richiamato da java nelmodo da te citato.


    per quanto riguarda windows, per quello che ne so io, il meccanismo di base degli strumenti da console è a suo modo semplificato, nel senso che ci sono sempre n. eseguibili (vedi netstat, format, copy, ecc...) ma il resto dei "comandi" è parsato dal tristissimo "interprete dei comandi" , il buon vecchio command.com o cmd o come si chiama con i windows odierni

    quindi ipoteticamente passando come parametro al command un istruzione tipo "dir", a quanto ne so io, si ottiene l'esecuzione del comando e l'output sullo stdout.
    dato che non uso windows non posso accertarmi personalmente dell'efficacia di questo sistema, ma se qualcuno lo prova non fa un soldo di danno..

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da trevor
    per il fatto che java deve essere svincolato dalla piattaforma sono d'accordo, ma è una questione puramente "filosofica", dal momento in cui se ne ho bisogno posso comunque usare comandi proprietari di una piattaforma e perdere la portabilità... a mia scelta.
    E' vero... ma la filosofia Java non ne sa nulla delle tue scelte... il fatto che tu decida di usare comandi proprietari e di perdere la portabilità non ha nulla a che vedere con la portabilità intrinseca di Java.
    In alcuni casi, per esempio, io ho optato di avviare dei comandi, basandomi sul fatto che Linux se ne frega delle estensioni: in questo modo, che io abbia un PIPPO.EXE compilato per Windows oppure uno shell script per linux chiamato PIPPO.EXE, la mia applicazione rimane portabile... a meno del file esterno! :gren:


    comunque i comandi da te citati, nel caso di linux si possono richiamare perchè sono dei veri e propri files binari eseguibili che risiedono o in /usr/bin o in /bin o in /usr/sbin o in /sbin...
    quindi anche il vdir, ls, find, grep, chmod... qualsiasi comando della shell può essere richiamato da java nelmodo da te citato.
    Infatti... è quello che ho detto anch'io! :gren:


    per quanto riguarda windows, per quello che ne so io, il meccanismo di base degli strumenti da console è a suo modo semplificato, nel senso che ci sono sempre n. eseguibili (vedi netstat, format, copy, ecc...) ma il resto dei "comandi" è parsato dal tristissimo "interprete dei comandi" , il buon vecchio command.com o cmd o come si chiama con i windows odierni

    quindi ipoteticamente passando come parametro al command un istruzione tipo "dir", a quanto ne so io, si ottiene l'esecuzione del comando e l'output sullo stdout.
    dato che non uso windows non posso accertarmi personalmente dell'efficacia di questo sistema, ma se qualcuno lo prova non fa un soldo di danno..
    Purtroppo questo accade solo ipoteticamente, come hai giustamente detto tu... ho effettuato delle prove. CMD.EXE vuole questa sintassi:
    codice:
    CMD /C <nome_comando>
    
    <nome_comando>: il comando da eseguire (quindi anche comando interno).
    di conseguenza ho fatto questo semplicissimo programmino:
    codice:
    class Prova {
       public static void main(String [] args) {
          String [] comando = {"CMD.EXE", "/C", "DIR"};
          try {
             Runtime r = Runtime.getRuntime();
             r.exec(comando);
          } catch (Exception e) { e.printStackTrace(); }
       }
    }
    Risultato: nulla!
    L'applicazione si avvia e termina senza produrre nessun output. Il comando, a quanto pare, viene interpretato correttamente, ma di vederne i risultati non se ne parla.

    Comunque non vedo l'utilità di eseguire comandi come questi... sarà perchè non ne ho mai avuto bisogno.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    ciao ragazzi secondo voi perchè non funziona questo comando?

    codice:
      Runtime r=Runtime.getRuntime();
      try{
      r.exec("/usr/sbin/iwconfig eth1 > dattt");
      }catch(Exception ex)
      {
      System.out.print("ciao");
      }
    o meglio, funziona ma non crea il file dattt
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Perchè quando hai a che fare con dei parametri (o meglio, un comando con degli spazi, che non siano il nome del file), devi usare il metodo exec() che accetta un array di String. Non so, però, se funziona con la redirezione dell'output, comunque puoi provare così:
    codice:
    Runtime r=Runtime.getRuntime();
    String [] comando = {"/usr/sbin/iwconfig", "eth1", ">", "dattt"};
    try{
       r.exec(comando);
    }catch(Exception ex) {
       System.out.print("ciao");
    }

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.