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

API standards et tierces Java Discussion :

Commandes Shell capricieuses


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Par défaut Commandes Shell capricieuses
    Bonjour à tous
    Mon problème est le suivant : mon interface graphique Java-Swing lancée depuis un shell unix cherche à réaliser un make d'un autre programme.
    Donc je veux faire
    "cd le_path_qu_il_faut"
    "make"
    Le make étant bavard j'aimerais avoir la sortie sur la console ayant servi à lancer l'interface java-swing
    D'où le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try
    {
    Process p = Runtime.getRuntime().exec("cd /mon_rep;make");
    p.WaitFor();
    }
    catch
    {
    ...
    }
    Pas de bol ça ne marche pas, je me retrouve dans le catch systématiquement.
    D'où un autre essai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try
    {
    Process p = Runtime.getRuntime().exec("/bin/sh -c cd /mon_rep;make");
    p.WaitFor();
    }
    catch
    {
    ...
    }
    Là plus de passage dans le catch mais aucune sortie à l'écran et le make qui doit prendre 10 min est expédié en dépit du WaitFor() !!!
    Where is the problem ?
    merci

  2. #2
    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,

    Il faut lire les flux de sortie :

    http://www.developpez.net/forums/sho....php?p=1302907

    a++

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Par défaut
    merci de ta réponse. J'ai suivi ton conseil et ai obtenu les flux de sortie via le code suivant :

    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
     
    String cmd = new String("make"); // commande simplifiée
    try
    {
      final Process q = Runtime.getRuntime().exec("/bin/sh -c " + "cd " + m_Path + ";" + cmd);
      q.waitFor();
     
      //Lecture du flux d'erreur dans un thread séparé :
      new Thread()
      {
        public void run()
        {
          dumpAndCloseInput(q.getErrorStream(), System.err);
        }
      }.start();
     
      // Lecture du flux standard de sortie :
      dumpAndCloseInput(q.getInputStream(), System.out);
      System.out.println("ok fini");
      }
      catch (Exception ex)
      {
       JOptionPane.showMessageDialog(this,"Unable to run Make ","Error",JOptionPane.WARNING_MESSAGE);
      }
    La sortie à l'écran est nulle je n'ai rien sauf le "ok fini"...
    (je précise que si la commande est "sdftrt", j'obtiens fort logiquement "commande introuvable")
    Merci

  4. #4
    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
    Quelques conseils :

    Il faut éviter d'utiliser la version de exec() avec un String en paramètre, et lui préférer celle avec un tableau pour bien différencier les paramètres.

    En effet, la ligne /bin/sh -c cd /mon_rep;make correspond à l'appel du programme /bin/sh avec 3 paramètres :
    1. -c
    2. cd
    3. /mon_rep;make
    Ce qui n'est surement pas ce que tu voulais...

    Enfin, si tu veux changer le répertoire d'exécution du programme, il faut mieux passer par la version longue de exec() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Runtime.getRuntime().exec(
        cmd,    // Programme a appelé
        null,    // Environnement par défaut
        new File(m_Path) // Répertoire de travail
    );
    a++

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Par défaut
    Que te dire sinon "merci beaucoup" ?
    tout fonctionne au poil
    A bientôt

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

Discussions similaires

  1. [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
  2. []Commande shell
    Par phoenix736 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 09/10/2005, 20h31
  3. [Debutant] Commande shell
    Par drosophile dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 21/04/2005, 15h06
  4. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37
  5. [VB6] comment savoir si la commande shell est terminée ?
    Par ghyscharlotte dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/07/2003, 19h12

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