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 :

[I/O] Récupérer l'inputStream d'un process


Sujet :

Entrée/Sortie Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 69
    Par défaut [I/O] Récupérer l'inputStream d'un process
    Bonjour,

    Lorsque j'exécute le processus "cmd" et que je récupère son inputStream je peux accéder aux donnée reçues. Par contre quand j'utilise un autre exécutable impossible de récupéré ce que renvoie l'inputStream (à la main il affiche bien qqch) voici le code :

    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
     
    ProcessBuilder b = new ProcessBuilder(	"C:/openocd-2007re204/bin/openocd-ftd2xx",
    										"-f",
    										"D:/at91r40008_jtagkeyARMEBS.cfg") ;
     
    //ProcessBuilder b = new ProcessBuilder("cmd") ;
     
    try 
    {
    	Process process = b.start() ;
    	BufferedReader ds = new BufferedReader(new InputStreamReader(process.getInputStream()));
     
    	while (!ds.ready()){}
     
    	String lineCourante = ds.readLine() ;
    	while (lineCourante != null) {
    	System.out.println(lineCourante);
    	lineCourante = ds.readLine();
    	}
    }
    catch (Exception e8){System.out.println(e8.getMessage());}
    Avec l'exécutable 'openOCD' la boucle while (!ds.ready()){} devient infinie, par contre avec 'cmd' la console affiche bien le résultat.

    peut-être l'autre exécutable de gère pas bien son stdOut ?

    Merci de vos commentaires.

    gl0be

  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,


    A mon avis tu peux déjà supprimer la boucle sur le ready() qui est non seulement complètement inutile mais également potentiellement problématique car il peut ne pas être implémenté (bref c'est juste à titre informatif).

    De plus c'est une attente active qui risque de prendre tout le temps CPU pour rien, alors que le readLine() ou n'importe quel read() bloquera proprement s'il n'y a pas de données à lire...


    De plus tu ne libères pas tes ressources !!! Comment libérer proprement les ressources ?


    Enfin il faut impérativement traiter TOUS les flux, même stdin et stderr (surtout que ce dernier contient les éventuels messages d'erreurs du process), ou dans le pire des cas tu dois fermer ces flux... sinon tu risque un interblocage entre ton programme et le process lancé (chacun s'attend mutuellement).

    Plus d'info :


    Bonne lecture

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2004
    Messages : 69
    Par défaut
    Merci beaucoup de ta réponse très complète ! :-)

  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
    De rien

    PS : pour la prochaine fois, tu peux utiliser directement le bouton en bas de page plutôt que d'éditer le titre du premier message

    a++

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

Discussions similaires

  1. Récupérer la main sur un process Runtime
    Par Mayhem555 dans le forum Général Java
    Réponses: 4
    Dernier message: 28/10/2011, 12h35
  2. Récupérer un erreur dans un "process"
    Par gabdeschenes dans le forum Développement Windows
    Réponses: 5
    Dernier message: 31/07/2010, 02h46
  3. récupérer un inputstream d'un fichier
    Par isoman dans le forum Général Java
    Réponses: 3
    Dernier message: 30/01/2009, 21h59
  4. Récupérer le % d'occupation de la RAM du process en cours
    Par Tenguryu dans le forum C++Builder
    Réponses: 6
    Dernier message: 20/11/2006, 20h01
  5. [JSP][Process] Récupérer message
    Par hedgehog dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 20/07/2005, 13h33

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