Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [JAVA] Runtime.getRuntime().exec

    Ho utilizzato questo metodo per far eseguire mysqldump, col quale faccio il backup di un database.

    Ho scritto così:

    File f = new File("c.sql");
    try {
    System.out.println (f.getAbsolutePath());
    Process run = Runtime.getRuntime().exec(
    "mysqldump --all-databases < \" " + f.getAbsolutePath() + "\" --host=" + ip_label.getText() + " --port=" + port_label.getText() + " --user=" + txtUserId.getText() + " --password=" + txtPassword.getText());
    System.out.println ("OK");
    }

    Io vorrei che fosse eseguito il comando scritto sopra, che da shell funziona benissimo, il quale dovrebbe scrivere sul file di testo c.sql.

    Quando vado a vedere il file però, è vuoto...

    Perchè?

    Se invece eseguo il comando da shell il tutto fila liscio.

    Sbaglio qualcosa nella stringa o è proprio il concetto che non mi quadra?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Runtime.getRuntime().exec

    Originariamente inviato da ragnonerodocet
    codice:
    "mysqldump --all-databases < \" " + f.getAbsolutePath()  + "\" --host=" + ip_label.getText() + " --port=" + port_label.getText() + " --user=" + txtUserId.getText() + " --password=" + txtPassword.getText());
    Sbaglio qualcosa nella stringa o è proprio il concetto che non mi quadra?
    Vedo che c'è 1 spazio tra l'apice doppio " e il path del file.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Io ho provato a cancellare lo spazio, e facendo altre prove mi sono accorto di altri errori:

    adesso io faccio innanzitutto stampare la stringa che poi vado ad eseguire

    così:

    System.out.println (stringa_contenente_istruzioni);

    Process run = Runtime.getRuntime().exec(stringa_contenente_istru zioni);

    Se poi vado a rivedere il file, esso è vuoto.

    Se però la stessa identica stringa che stampo la vado a eseguire sulla shell, il file si riempie.

    Perchè?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    E chi lo sa?
    Hai provato ad eseguire il programma Java direttamente dal prompt esattamente come se dovessi lanciare il comando? Hai notato se per caso ti dà qualche errore in esecuzione? Perchè se lo lanci con un doppio clic, non vedi la consolle e, di conseguenza, non vedi nemmeno se viene generato un errore o meno.

    Al limite, metti una pausa (una lettura da System.in) per verificare che non ci siano errori in esecuzione.


    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
    L'applicazione java non dà problemi di alcun tipo. E' questo che mi scoraggia.

    La cosa che mi pare strana è che la stessa stringa, se eseguita direttamente sul prompt, dà esito positivo, mentre da Eclipse non va proprio.

    NOn so che pensare.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ragnonerodocet
    La cosa che mi pare strana è che la stessa stringa, se eseguita direttamente sul prompt, dà esito positivo, mentre da Eclipse non va proprio.
    Puoi postare la stringa esatta che generi??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da ragnonerodocet
    L'applicazione java non dà problemi di alcun tipo. E' questo che mi scoraggia.

    La cosa che mi pare strana è che la stessa stringa, se eseguita direttamente sul prompt, dà esito positivo, mentre da Eclipse non va proprio.

    NOn so che pensare.
    Continui a dire "da Eclipse"... io ti ho chiesto "dal prompt"... sono due cose diverse, che hanno directory di lavoro diverse, oltre che classpath diverse....
    MAI pensare che ciò che accade nell'ambiente di sviluppo sia esattamente ciò che accade nella realtà. Ecco perchè io non testo mai le applicazioni direttamente nell'ambiente di sviluppo...


    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

  8. #8
    Ho lo stesso problema ovunque...

    Allora si vede che sbaglio qualcosa di assurdo.

    Io vorrei che Java mi permettesse di eseguire un'istruzione come fosse dal prompt.

    E' possibile?

    Perchè non capisco una cosa:

    la stessa identica istruzione, nel metodo Runtime.getRuntime().exec(SRINGA) non funziona, e se stampo la stessa stringa e la incollo nel prompt tutto funziona a meraviglia...

    Allora il problema può essere più a monte...

    E' giusto il procedimento che faccio o sto facendo una baggianata dietro l'altra?

    PS: ho letto solo ora le risposte.

    Come faccio a far partire l'applicazione da prompt?

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da ragnonerodocet
    PS: ho letto solo ora le risposte.

    Come faccio a far partire l'applicazione da prompt?
    Apri il prompt.
    Ti posizioni nella directory "root" della tua applicazione (in base alle specifiche del package, saprai qual è la directory root, se hai un Jar posizionati dove hai il jar).
    Assicurandoti che l'esecutore java.exe sia puntato dalla variabile d'ambiente PATH dai il seguente comando:

    codice:
    // in caso sia solo un .class da avviare
    $ java nome.completo.tua.classe.da.Avviare
    
    // in caso sia un JAR
    $ java -jar nomeDelJar.jar
    Ovviamente, la directory corrente è, in questo caso, la directory "root" della tua applicazione.


    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

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ragnonerodocet
    Io vorrei che Java mi permettesse di eseguire un'istruzione come fosse dal prompt.

    E' possibile?
    Certo.

    Originariamente inviato da ragnonerodocet
    la stessa identica istruzione, nel metodo Runtime.getRuntime().exec(SRINGA) non funziona, e se stampo la stessa stringa e la incollo nel prompt tutto funziona a meraviglia...
    Se postassi la stringa .... almeno vediamo cosa è stato composto!!!

    Comunque se la directory dove c'è l'eseguibile mysqldump è in "PATH" (quindi non c'è bisogno di invocarlo con il path completo) e se nel comando hai specificato path assoluti e i parametri sono corretti, in linea di massima non ci dovrebbero essere problemi.

    C'è però una questione. Il mysqldump fa dell'output e/o si aspetta qualcosa in input?? Perché in tal caso devi gestirli da Java!!! Se fa dell'output devi leggerlo da Java.
    Così come l'hai lanciato, cioè direttamente il tool, non apre una nuova console e nemmeno scrive su una console ... nemmeno se lanciassi la tua applicazione java già da una console!!!

    Se vuoi che la exec() apra una nuova console ... si può fare.

    Originariamente inviato da ragnonerodocet
    Come faccio a far partire l'applicazione da prompt?
    Dipende .... se hai realizzato un jar (con manifest corretto per l'avvio), se hai solo i file .class "sfusi".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.