IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[Runtime]Commande avec paramètre


Sujet :

Java

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Points : 10
    Points
    10
    Par défaut [Runtime]Commande avec paramètre
    Bonjour,

    Dans mon programme Java j'ai besoin d'exécuter 2 programmes par l'intermédiaire d'une ligne de commande. Le problème est que le 1er programme s'exéture correctement mais le deuxième pas du tout.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public void lignecommande(String commande) { //execute la ligne de commande
            try {
                //System.out.println(commande);
                Runtime rt = Runtime.getRuntime();
                Process proc = rt.exec(commande);
            } catch (Throwable t) {
                System.out.println(
                        "\n\nErreur lors de l'exécution de la ligne de commande !\n\n" +
                        commande + "\n\n");
                t.printStackTrace();
            }
        }
     
    (1) String cmd1 = "C:\\Program Files\\Connexor Oy\\cnxfdg2\\cnxfdg2en10.exe <source.txt>dest.txt --ie" ;
    lignecommande(cmd1) ;
     
    (2) String cmd2 = "C:\\Program Files\\Konvertor_pdf2xxx\\Konvertor_pdf2xxx.exe \"Q|C:\\test\\testfr.pdf|C:\\test\\testfr.txt|c:\\test\\monIni.ini\"" ;
    lignecommande(cmd2) ;
    La cmd (2) fonctionne correctement, s'est la (1) qui ne s'exécute pas !

    Qui pourrait me dire où est mon erreur ?

    Merci beaucoups

    greg

  2. #2
    Membre habitué
    Avatar de guipom
    Inscrit en
    Janvier 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 207
    Points : 184
    Points
    184
    Par défaut
    Peut etre un petit descriptif de l'erreur, une exception, ca ne fait rien ? Ca veut dire quoi pour toi ne s'exécute pas ?

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Points : 10
    Points
    10
    Par défaut
    OK alors ce que je veux dire c'est que le programme appelé (cnxfdg2en10.exe) ne fait pas ce que je lui demande.

    Je lui dis de prendre le fichier source (<source.txt) et de le traiter avec l'option (--ie) et de sauver les valeurs dans le fichier destination (dest.txt)

    Si j'exécute cette commande depuis "CMD"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cd program files/connexor oy/cnxfdg2 (enter)
     
    cnxfdg2en10.exe <source.txt>dest.txt --ie (enter)
    Le programme exécuté me dit que l'opération s'est bien déroulée et le fichier a bien été créé..

    En espérant que ce soit plus clair !

    merci

  4. #4
    Membre habitué
    Avatar de guipom
    Inscrit en
    Janvier 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 207
    Points : 184
    Points
    184
    Par défaut
    Si j'ai bien compris le problème, les paramètres (après l'exe quoi) sont à traiter différement. En gros tu n'utilises pas je pense la bonne méthode, en tous cas moi j'utilise :

    Process exec(String cmd, String[] envp)
    Executes the specified string command in a separate process with the specified environment.
    un exemple :

    Process p = Runtime.getRuntime().exec("/bin/sh -c /bin/ls > ls.out");
    s'écrit :

    String[] cmd = {"/bin/sh", "-c", "/bin/ls > out.dat"};
    Process p = Runtime.getRuntime().exec(cmd);

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Points : 10
    Points
    10
    Par défaut
    J'ai essayé comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String [] cmd = {"C:\\Program Files\\Connexor Oy\\cnxfdg2>cnxfdg2en10.exe ", "<source.txt>", "dest.txt", " --ie"} ;
            try {
                Process p = Runtime.getRuntime().exec(cmd);
            } catch (IOException ex) {
            }
    Mais ça ne fonctionne toujours pas !

  6. #6
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Ta commande 1 utilise des redirections et des pipes qui ne sont pas compris par un programme mais pas le shell (Exemple: cmd en windows ou /usr/bin/sh sous linux).

    En plus, il est préférable d'utiliser la méthode Runtime.process(String[] cmd) donc de passer la ligne avec un string array.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public void lignecommande(String[] commande) { //execute la ligne de commande
            try {
                //System.out.println(commande);
                Runtime rt = Runtime.getRuntime();
                Process proc = rt.exec(commande);
            } catch (Throwable t) {
                System.out.println(
                        "\n\nErreur lors de l'exécution de la ligne de commande !\n\n" +
                        commande + "\n\n");
                t.printStackTrace();
            }
        }
     
    (1) String[] cmd1 = {"cmd", "/c",
                                   "C:\\Program Files\\Connexor Oy\\cnxfdg2\\cnxfdg2en10.exe",
                                   "<source.txt",
                                   ">dest.txt",
                                   "--ie"} ; /* Es-tu de sûr de placer correctement l'option à la fin? */
    lignecommande(cmd1) ;
     
    (2) String[] cmd2 = {"cmd", "/c",
                                   "C:\\Program Files\\Konvertor_pdf2xxx\\Konvertor_pdf2xxx.exe", 
                                   "\"Q|C:\\test\\testfr.pdf|C:\\test\\testfr.txt|c:\\test\\monIni.ini\"" ;
    lignecommande(cmd2) ;

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par jowo
    Ta commande 1 utilise des redirections et des pipes qui ne sont pas compris par un programme mais pas le shell (Exemple: cmd en windows ou /usr/bin/sh sous linux).

    En plus, il est préférable d'utiliser la méthode Runtime.process(String[] cmd) donc de passer la ligne avec un string array.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public void lignecommande(String[] commande) { //execute la ligne de commande
            try {
                //System.out.println(commande);
                Runtime rt = Runtime.getRuntime();
                Process proc = rt.exec(commande);
            } catch (Throwable t) {
                System.out.println(
                        "\n\nErreur lors de l'exécution de la ligne de commande !\n\n" +
                        commande + "\n\n");
                t.printStackTrace();
            }
        }
     
    (1) String[] cmd1 = {"cmd", "/c",
                                   "C:\\Program Files\\Connexor Oy\\cnxfdg2\\cnxfdg2en10.exe",
                                   "<source.txt",
                                   ">dest.txt",
                                   "--ie"} ; /* Es-tu de sûr de placer correctement l'option à la fin? */
    lignecommande(cmd1) ;
     
    (2) String[] cmd2 = {"cmd", "/c",
                                   "C:\\Program Files\\Konvertor_pdf2xxx\\Konvertor_pdf2xxx.exe", 
                                   "\"Q|C:\\test\\testfr.pdf|C:\\test\\testfr.txt|c:\\test\\monIni.ini\"" ;
    lignecommande(cmd2) ;

    Oui je suis sur que s'est bien à la fin qu'il faut la mettre, en tout cas en écrivant manuellement dans la ligne de commande s'est comme ça qu'il faut faire..

    dans ta cmd1, tu écris "/c", à quoi ça correspond ?

    (désolé ça ne marche pas non plus)

  8. #8
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    ça correspond à une option de la commande cmd de windows.

    En mode console, saisie la ligne suivante:

  9. #9
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Essaie de modifier le code de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public int lignecommande(String[] commande) { //execute la ligne de commande
            try {
                //System.out.println(commande);
                Runtime rt = Runtime.getRuntime();
                Process proc = rt.exec(commande);
                /* attend que la commande se termine et
                    retourne un status */
                return proc.waitFor(); 
            } catch (Throwable t) {
                System.out.println(
                        "\n\nErreur lors de l'exécution de la ligne de commande !\n\n" +
                        commande + "\n\n");
                t.printStackTrace();
                return -1;
            }
        }

  10. #10
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Points : 10
    Points
    10
    Par défaut
    J'ai essayé de modifier mon code en métant le tien jowo et ça me retourne

    1

    mais rien ne se passe quand même..

    j'ai utilisé cette commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String[] cmd = {"cmd", "/c", 
                                   "C:\\Program Files\\Connexor Oy\\cnxfdg2\\cnxfdg2en10.exe", 
                                   "<source.txt", 
                                   ">dest.txt", 
                                   "--ie"} ;

    J'ai pensé peut-être créer un fichier batch et l'exécuter ?

    fichier batch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cnxfdg2en10.exe <%1>%2 --ie
    que je copie dans le dossier c:\program files\connexor oy\cnxfdg2\

    si j'execute cette commande sous CMD ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    batch.bat source.txt dest.txt
    comme puis-je l'utiliser dans mon code java ? car comme ça ca ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] cmd = {"cmd", "/c", "c:\\program files\\connexor oy\\cnxfdg2\\test2.bat", "source.txt", "dest.txt"};

  11. #11
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    l'état 1 indique une erreur ;-)

    Par convention, 0 indique une fin du programme normale.

  12. #12
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Une erreur simple et évidante.

    Comment fait-il pour trouver ton fichier "source.txt"?

    Donne le chemin complet de ton fichier.

  13. #13
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Points : 10
    Points
    10
    Par défaut
    si en ligne de commande j'écris <source.txt> il prend la source qui se trouve dans le dossier du programme à exécuter. donc normalement ici il devrait aussi la prendre.. Mais je vais essayer de mettre la source complète..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String[] cmd = {"cmd", "/c", 
                                   "C:\\Program Files\\Connexor Oy\\cnxfdg2\\cnxfdg2en10.exe", 
                                   "<C:\\Program Files\\Connexor Oy\\cnxfdg2\\source.txt", 
                                   ">C:\\Program Files\\Connexor Oy\\cnxfdg2\\dest.txt", 
                                   "--ie"} ;
    me renvoie 1

  14. #14
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    La dernière chance pour moi:

    Essaie donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String[] cmd = {"cmd", "/c",
                                   "C:\\Program Files\\Connexor Oy\\cnxfdg2\\cnxfdg2en10.exe",
                                   "<", "C:\\Program Files\\Connexor Oy\\cnxfdg2\\source.txt",
                                   ">", C:\\Program Files\\Connexor Oy\\cnxfdg2\\dest.txt",
                                   "--ie"} ;

  15. #15
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par jowo
    La dernière chance pour moi:

    Essaie donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String[] cmd = {"cmd", "/c",
                                   "C:\\Program Files\\Connexor Oy\\cnxfdg2\\cnxfdg2en10.exe",
                                   "<", "C:\\Program Files\\Connexor Oy\\cnxfdg2\\source.txt",
                                   ">", C:\\Program Files\\Connexor Oy\\cnxfdg2\\dest.txt",
                                   "--ie"} ;
    Désolé marche pas !

    Tu penses quoi de passer par un batch ? ça pourrait fonctionner ? comment faire..

  16. #16
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Il faut savoir pourquoi ton programme retourne le status 1.

  17. #17
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Points : 10
    Points
    10
    Par défaut
    et je fais comment ça ? :p

  18. #18
    Membre confirmé Avatar de anitshka
    Inscrit en
    Mai 2004
    Messages
    624
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 624
    Points : 605
    Points
    605
    Par défaut
    vérifie tes droit d'acces à source.txt ... tu es sur de pouvoir écrire dedans ?

  19. #19
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Il faut trouver dans la documentation de windows dans quelle condition cmd retourne la valeur 1.

    Je sais que le code 2 signifie qu'il n'a pas trouvé un fichier.

  20. #20
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 38
    Points : 10
    Points
    10
    Par défaut
    J'ai trouvé comment faire bon après avoir passé plus de 2 heures dessus

    J'ai créé un fichier batch à la racine de mon projet (par ex)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "c:\program files\connexor oy\cnxfdg2\cnxfdg2en10.exe" %1 <%2>%3
    que j'appelle depuis mon programme par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            String cmd = "\"lancerAnalyse.bat\" --ie \"c:\\source.txt\" \"c:\\dest.txt\"";
    et ça fonctionne très bien..

    Merci pour vos idées, elles m'ont certainement aidé à trouvé la réponse !

    J'ai un autre problème, mais vai créé un nouveau topic.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/04/2013, 16h53
  2. Execution d'une commande avec Runtime
    Par Djobird dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 17/04/2009, 12h44
  3. Réponses: 2
    Dernier message: 13/06/2008, 20h15
  4. Runtime Access avec ligne de commande
    Par vincent rigoulot dans le forum Runtime
    Réponses: 1
    Dernier message: 28/09/2006, 10h28
  5. [Runtime]exec() avec une commande paramétrée
    Par nice dans le forum Général Java
    Réponses: 9
    Dernier message: 12/05/2005, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo