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

Entrée/Sortie Java Discussion :

Lancement d'un batch


Sujet :

Entrée/Sortie Java

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut Lancement d'un batch
    Bonjour !
    Dans une application, je lance un fichier ".bat" de la façon 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
     
    Runtime rtGenExe = Runtime.getRuntime();
    Process proc = rtGenExe.exec("cmd /C d:\\MakeExe.bat " + nomBaseSite);
    // Log des messages
    String ligne;
    BufferedReader sortie = new BufferedReader(new InputStreamReader(proc.getInputStream()));
    while ( (ligne = sortie.readLine()) != null ) {
      cr.log("  "+ligne);
    }
    sortie.close();
    BufferedReader sortieErr = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
    while ( (ligne = sortieErr.readLine()) != null ) {
      cr.log("  Erreur : "+ligne);
    }
    sortieErr.close();
    Le problème de cette méthode, c'est que j'affiche d'abord les "echo" du batch, puis les erreurs. N'y a-t-il pas un moyen d'avoir tous les messages, dans l'ordre d'exécution des commandes du batch ?

    Merci d'avance !

  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 dans des threads séparé ! C'est même fortement conseillé afin d'éviter des inter-blocages !!!

    si ton programme génère plein de messages d'erreurs, il est possible qu'il remplisse le buffer "stderr" et qu'il se retrouve bloqué en attendant que tu vides ce buffer en le lisant. Or pendant ce temps ton programme est bloqué en lecture sur "stdout" tant que l'application n'est pas terminé...

    Plus d'info : Bonnes pratiques pour lancer des applications

    Ou sinon tu peux aussi utiliser mon API qui simplifie un peu cela : Runtime.exec() n'est pas des plus simple... (Java 5.0 seulement / et il faudrait que je fasse un peu de doc )

    a++

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Hum hum, ça va pas être simple pour moi
    J'avais déjà lu ton blog à ce sujet, et j'avais pas tout compris, alors je m'étais dis "je verrais quand j'en aurais besoin". Ben ca va pas tarder lol.
    Etant donné que j'ai plusieurs batch, un peu partout dans l'application, le meilleur moyen serait que je fasse une classe séparée pour gérer un thread.

    Merci pour ces informations, je mets la discution en résolu puisqu'il y a suffisament d'informations pour que j'avance ! Je réouvrirais si jamais j'ai des problèmes

    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
    Citation Envoyé par JohnNC
    Hum hum, ça va pas être simple pour moi
    J'avais déjà lu ton blog à ce sujet, et j'avais pas tout compris, alors je m'étais dis "je verrais quand j'en aurais besoin". Ben ca va pas tarder lol.
    Etant donné que j'ai plusieurs batch, un peu partout dans l'application, le meilleur moyen serait que je fasse une classe séparée pour gérer un thread.
    Ben si tu utilises Java 5.0 tu peux utiliser mon API, par exemple :
    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
    		// On crée l'instance de la classe qui exécutera les commandes
    		Shell sh = new Shell();
     
    		// On crée les StringBuilder qui contiendront les sorties du process :
    		StringBuilder out = new StringBuilder();
    		StringBuilder err = new StringBuilder();
     
    		// On crée l'instance de ProcessConsumer qui traitera les flux :
    		ProcessConsumer process = sh.command("d:\\MakeExe.bat " + nomBaseSite);
    		// On redirige le flux de sortie et d'erreur
    		// (par défaut le flux d'entrée est ignoré,
    		// et les flux stdout/stderr renvoyent vers System.out/err)
    		process.output(out).error(err);
     
    		// On lance le process en traitant les flux :
    		int result = process.consume();
    La gestion des threads est totalement transparente
    Et si tu veux voir les flux au fur et a mesure tu peux utiliser des Writer à la place des StringBuilder


    a++

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

Discussions similaires

  1. SAS Lancement programme en Batch
    Par ALLB dans le forum Administration et Installation
    Réponses: 3
    Dernier message: 17/09/2009, 16h17
  2. Lancement d'un batch en mode invisible
    Par thomas59p dans le forum Scripts/Batch
    Réponses: 9
    Dernier message: 03/12/2008, 18h03
  3. Lancement Access via Batch
    Par petozak dans le forum Access
    Réponses: 3
    Dernier message: 01/10/2007, 16h33
  4. Lancement d'un batch Dos "silencieusement"
    Par jeff37 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 08/03/2006, 17h39
  5. [MFC] Lancement de fichier batch
    Par spirit_1999 dans le forum MFC
    Réponses: 28
    Dernier message: 01/06/2005, 11h21

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