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

Langage Java Discussion :

[Linux] Execution d'une commande


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut [Linux] Execution d'une commande
    Hello,

    J'ai fait un programme JAVA qui execute un commande linux et qui affiche le résultat...

    La fonction:
    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
    public static void executeCommand(String command){
            Process p = null;
            try {
                p = Runtime.getRuntime().exec(command);
            } catch (IOException e) {
                e.printStackTrace();
            }
            java.io.BufferedReader out = new java.io.BufferedReader( new java.io.InputStreamReader( p.getInputStream() ) );
     
            String line = "";
            try {
                while((line=out.readLine())!=null){
                    System.out.println(line);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    Si je l'appèle comme ceci: Pas de souci! Ca m'affiche bien le chemin courant!

    Si je l'appele comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    executeCommand("ls ./plugins/*.*");
    , rien ne s'affiche (pas d'erreur générée non plus...) Alors que la même commande depuis le même chemin mais tapée dans une invite de commande m'affiche bien tous les fichiers du dossier!

    Pourquoi??

    C'est vraiment bizarre!

    Merci d'avance

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Fais le exec sur un tableau de String contenant les mots de ta commande.
    La question a déjà été posée des dizaines de fois...
    EDIT ton code est sale, utiliser la fonction rechercher pour en savoir d'avantage notamenent pourquoi il faut géré les entrées/sorties dans des threads séparés.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Utilise plutot un Vector (ou autre objet permis) et fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Vector command = new Vector();
    command.add("ls");
    command.add("./plugins/*.*");
    executeCommand(command);
    Oups grillé

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Il Ne Faut Plus Utiliser Vecteur Lorsque Cela Est Possible !

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 130
    Par défaut
    Citation Envoyé par iohack
    Il Ne Faut Plus Utiliser Vecteur Lorsque Cela Est Possible !
    Ah bon, pourquoi (hormis le fait que c'est plus lourd q'un simple tableau) ?

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Yannick_from_31
    Ah bon, pourquoi (hormis le fait que c'est plus lourd q'un simple tableau) ?
    Parce qu'il faut lui préférer ArrayList

    a++

  7. #7
    Membre éclairé Avatar de ploxien
    Inscrit en
    Février 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Février 2006
    Messages : 467
    Par défaut
    Merci, avec Shell ,c'est parfait!

    A+

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par ploxien
    Si je l'appele comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    executeCommand("ls ./plugins/*.*");
    , rien ne s'affiche (pas d'erreur générée non plus...) Alors que la même commande depuis le même chemin mais tapée dans une invite de commande m'affiche bien tous les fichiers du dossier!
    Normal : les messages d'erreurs s'affichent dans le flux d'erreur que tu ne lis pas (getErrorStream()).
    Rappel : il faut traiter tous les flux d'E/S dans des threads différents (ou au moins les fermer si on ne les utilises pas).

    Et ici tu dois avoir une erreur qui précise que le fichier "./plugins/*.*" n'existe pas. En effet sous les système Unix c'est le shell qui "transforme" les caractères * en nom de fichier... Or Runtime n'est pas un shell...




    Si tu es sous Java 5.0 tu peux utiliser cette librairie qui tente de gérer la plupart des problèmes rencontré avec Runtime : [url=http://blog.developpez.com/index.php?blog=51&title=runtime_exec_n_est_pas_des_plus_simple&more=1&c=1&tb=1&pb=1]Runtime.exec() n'est pas des plus simple...[/quote]/applic/
    Ce qui reviendrait à faire dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell.system("ls ./plugins/*.*");
    Les sorties standard et d'erreurs sont reporté vers la console (System.out et System.err), alors que l'entrée standard est ignoré...



    Sinon jettes un coup d'oeil à ce tutoriel : Exécuter une application externe en Java
    Ou fais des recherches sur le forums (ce genre de problème est assez fréquent).


    a++


    PS : Tes try/catch ne sont pas très cohérent : Si un exception survient lors du lancement de l'application, tu tentes quand même de lire la sortie du programme (qui n'a pas pu être lancé), ce qui provoquera un joli NPE
    Tu devrais avoir un seul et unique bloc try/catch qui englobe tous le traitement...

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

Discussions similaires

  1. Execution d'une commande telnet dans un script sh
    Par Nospher dans le forum Linux
    Réponses: 17
    Dernier message: 23/08/2011, 15h30
  2. [Système]Execution d'une commande shell
    Par n8ken dans le forum API standards et tierces
    Réponses: 24
    Dernier message: 29/03/2007, 04h36
  3. Execution d'une commande systeme enC?
    Par must19 dans le forum Linux
    Réponses: 4
    Dernier message: 12/04/2006, 19h08
  4. [System][EXEC] Probleme d'execution avec une commande parametrée.
    Par chicorico dans le forum Général Java
    Réponses: 15
    Dernier message: 20/05/2005, 15h07

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