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 .bat error=2


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Par défaut execution .bat error=2
    Bonjour,

    J'ai une application en Java qui créer un fichier de commande (.bat).
    Ensuite avec la classe runtime.exec (j'execute ce .bat via une commande putty, je veux executer cette cmd sur une autre serveur)
    Voici le code pour être plus clair.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    final Process process = runtime.exec("putty -ssh user@serveur -pw passwd-m "+fichierCmd, null, new File("//rditrinn/sequences/Interface-BioinfoTools/FichiersTest/ResLaunchMfold"));
    			process.getOutputStream().close();

    Mon problème c'est que j'ai une erreur error=2:
    java.io.IOException: CreateProcess: putty -ssh user@serveur -pw passwd -m \\Interface-BioinfoTools\FichiersTest\fichierCmdJava.bat error=2
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    ....

    Quelle est cette error=2?

    Quand je lance ma ligne putty avec le .bat en paramètre directement dans une fenêtre de cmd, cela marche très bien, donc ça ne vient pas des ligne dans le .bat.
    Merci de votre aide

  2. #2
    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
    je ne sais pas trop pour l'erreur, mais il est fortement conseillé de mettre les paramètres de la commande dans un tableau, ça évite pas mal d'erreur ...

  3. #3
    Membre expérimenté Avatar de coco62
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 237
    Par défaut
    Il me semble que les paramétres de la commandé à passé sont dans un des paramètre du exec.

    pas exec("commande arg1") mais exec("commande","arg1")

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Par défaut
    Bonjour,

    Merci pour vos réponses.
    J'ai essayé en mettant ma commande dans un tableau de string, mais j'ai toujours la même erreur.
    Voici le nouveau code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    File fichierCmd = new File("//rditrinn/sequences/Interface-BioinfoTools/FichiersTest/fichierCmdJava.bat");
    			FileWriter fw = new FileWriter(fichierCmd);
    			fw.write(tabString);
    			fw.close();			
    			String[] tabStringExec = new String[] {"putty", "-ssh", "user@serveur", "-pw", "passwd", "-m", "//rditrinn/sequences/Interface-BioinfoTools/FichiersTest/fichierCmdJava.bat"};
    			final Process process = runtime.exec(tabStringExec, null);
    			process.getOutputStream().close();
    J'ai donc une IOException qui se lance en disant : CreateProcess "...maCmd..." error=2

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


    Sous Windows le séparateur de répertoire est le '\' et non pas le '/'...
    Essaye déjà de corriger cela...

    Ensuite pense bien à utiliser (ou fermer) tous les flux d'E/S de ton process...

    a++

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Par défaut
    Le problème c'est que quand je met des "\", il ne trouve plus mon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File fichierCmd = new File("\\\rditrinn\\sequences\\Interface-BioinfoTools\\FichiersTest\\fichierCmdJava.bat");
    ne marche pas, même avec seulement deux \ au début : "\\rditrinn.." cela ne fonctionne pas.
    Mais ailleurs dans mon programme je créé et traite des fichiers en mettant le chemin de la même façon (avec des /) et cela marche très bien.
    Sinon je traite bien mes flux d'entrée sortie:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    new Thread() {
    				public void run() {
    					try {
     
    						BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
    							String line = "";
    							try {
    								while((line = reader.readLine()) != null) {
    									// Traitement du flux de sortie de l'application si besoin est
    									//sortie = sortie.append(line);		
    									System.out.println("sortie : "+line+"\n");
    								}
    							} finally {
    								reader.close();
    							}
     
    						} catch(IOException ioe) {
    							ioe.printStackTrace();
    							System.out.println("IOExc : Application interrompu par le System");
    						}
    					}
    			}.start();
     
    			new Thread() {
    				public void run() {
    					try {
    						BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
    						String line = "";
    						try {
    							while((line = reader.readLine()) != null) {
    								// Traitement du flux d'erreur de l'application si besoin est
    								//erreur = erreur.append(line);
    								System.out.println("erreur : "+line+"\n");
    							}
    						} finally {
    							reader.close();
    						}
    					} catch(IOException ioe) {
    						ioe.printStackTrace();
    					}
    				}
    			}.start();
     
     
    			try{				
    				int fin = process.waitFor();				
    				System.out.println("La valeur de sortie de l'executione est:"+process.exitValue());						
    			}
    			catch(InterruptedException ie){
    				ie.printStackTrace();
    				System.out.println("InterruptedException : Application interrompu par le System");				
    			}
    			catch(IllegalThreadStateException itse){
    				itse.printStackTrace();
    				System.out.println("IllegalThreadStateException : Application interrompu par le System");
    			}

  7. #7
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 15
    Par défaut
    Ok c'est bon j'ai trouvé merci de votre aide.
    En fait il ne reconnaissait pas putty comme commande interne ou externe, j'ai du spécifier le chemin de putty et changer ma commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String[] tabStringExec = new String[] {"cmd.exe", "/C", "C:\\Documents and Settings\\user\\Bureau\\putty", "-ssh", "user@serveur", "-pw", "passwd", "-m", "//rditrinn/sequences/Interface-BioinfoTools/FichiersTest/fichierCmdJava.bat"};
    			final Process process = runtime.exec(tabStringExec); 
    			process.getOutputStream().close();

  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
    Citation Envoyé par La Goule
    Le problème c'est que quand je met des "\", il ne trouve plus mon fichier
    Tous les \ doivent être doublé, sinon il est considéré comme un caractère d'échappement (et \r correspond à un retour-chariot) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "\\\\rditrinn\\sequences\\Interface-BioinfoTools\\FichiersTest\\fichierCmdJava.bat"
    Dans une application Java la conversion / -> \ est automatique mais ce n'est pas forcément le cas pour une application native...

    a++

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

Discussions similaires

  1. executer .bat dans job talend
    Par Elise0251 dans le forum Exécution et industrialisation
    Réponses: 2
    Dernier message: 16/11/2009, 09h42
  2. executer .bat via .pl
    Par rojina29 dans le forum Langage
    Réponses: 2
    Dernier message: 20/07/2009, 12h46
  3. executer bat cote client avec vbscript
    Par mvr20 dans le forum ASP.NET
    Réponses: 7
    Dernier message: 09/07/2008, 09h51
  4. Pb execution .bat
    Par fred33 dans le forum Général Java
    Réponses: 2
    Dernier message: 17/03/2008, 17h52
  5. Executer .bat en arrière plan
    Par Freektrax dans le forum C++Builder
    Réponses: 27
    Dernier message: 08/01/2007, 08h28

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