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 :

execution d'une commande externe


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Par défaut execution d'une commande externe
    Bonsoir,

    Je me tourne vers vous pour esssayer de comprendre pourquoi le bout de code suivant pour lancer des commandes n'execute pas mon script jusqu'au bout :

    Je suis sous win xp.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try 
    {
    Runtime r = Runtime.getRuntime();
    Process p = r.exec(cmd /c c:\\script.bat);
    }
    catch(Exception e) 
    {
    System.out.println("erreur d'execution " + e.toString());
    }
    dand mon script.bat j'ai un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cd c:\repertoire\dev
    svn commit -F monfichier.php --force-log
    cd c:\repertoire\dev2
    svn commit -F monfichier2.php --force-log
    Bien sur si je lance mon fichier.bat normalement (double clique, il s'execute jusqu'au bout)

    Merci de votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Le probléme est que le point bat s'execute là où s'execute ton code java et non là où se trouve ton .bat

    la solution est d'imposer le repertoire d'execution du bat avec la méthode :

    exec(String[] cmdarray, String[] envp, File dir)

    et un appel du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    File dir = new File( "c:\\") ;	
    String temp[]={"cmd", "/c", " c:\\script.bat"};	
    Runtime.getRuntime().exec(temp,null,dir);

  3. #3
    in
    in est déconnecté
    Membre Expert Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Par défaut
    de plus en cherchant un peu tu verras que cette question revient 2 3 fois par jour. Du coup d'autres posts sont déjà très détaillés à ce sujet.

    Je te conseille d'aller voir la FAQ, il est est expliqué tout ça et en particulier la gestion des différents flux.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Par défaut
    Ok, merci !
    Et désolé, pourtant, j'ai cherché...

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Par défaut
    Je viens de tester, la soluce, ca ne marche pas...

    J'ai ajouter les flux d'entrée et sortie comme suit :

    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
     
    		// compression
    		File dir = new File("") ;	
    		String absolutePath="";
    		absolutePath=dir.getAbsolutePath()+"\\bin";
    		String temp[]={"cmd.exe", "/C", absolutePath+"\\archive.bat"};	
    		try 
    		{
    			Runtime r = Runtime.getRuntime();
    			Process p = r.exec(temp,null,absolutePath);
    			java.io.BufferedReader ds = new java.io.BufferedReader(new java.io.InputStreamReader( p.getInputStream() ) ); 
    			String slineCourante = ds.readLine();
    			while (slineCourante != null) 
    			{ 
    			      System.out.println(slineCourante);
    			      slineCourante = ds.readLine(); 
    			}
    		}
    		catch(Exception e) 
    		{
    			System.out.println("erreur d'execution " +e.toString());
    			return false;
    		}
    et dans mon archive.bat, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    7z u "c:\archive.zip" "c:\dossier_a_archiver"
    S'il vous plait ne dite pas que j'ai pas cherché, c'est pas facile, quand on ne sait pas où chercher, c'est à dire quand on ne sait pas d'où vient le problème...

  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 crazykangourou
    S'il vous plait ne dite pas que j'ai pas cherché, c'est pas facile, quand on ne sait pas où chercher, c'est à dire quand on ne sait pas d'où vient le problème...
    Alors imagine un peu pour nous lorsqu'on a comme seule et unique info "ca marche pas" !!!


    De plus si tu ne lis pas le flux d'erreur et que tu n'utilises pas le flux d'entrée, tu devrais les fermer juste après avori créer le process (mais tu risque de perdre les éventuelles erreurs affiché par ton script).

    Un peu de lecture :


    a++

Discussions similaires

  1. Problème à l'execution d'une commande externe
    Par lucaskywalker dans le forum Général Python
    Réponses: 15
    Dernier message: 04/11/2011, 09h53
  2. [Système] executer une commande externe depuis php
    Par sebgaillard dans le forum Langage
    Réponses: 1
    Dernier message: 09/04/2008, 15h34
  3. [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
  4. [Système] Pb exécution d'une commande externe
    Par licorne dans le forum Langage
    Réponses: 9
    Dernier message: 19/10/2005, 16h34
  5. [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