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 :

executer programme en ligne de commande


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut executer programme en ligne de commande
    Bonjour,

    Je réalise actuellement un programme Java qui va me permettre d'executer un programme externe via ma ligne de commande. Ce programme me permet d'entrer une chaine de caractères en entrée et de récupérer un résultat en sortie. Pas de soucis pour cela.

    J'ai quelques questions concernant l'optimisation de mon code. En effet, je construit ma ligne de commande et j'ajoute un "-" à la fin pour indiquer la sortie standard STDIN. Cela me permet de ne lancer mon programme qu'une seule fois (sinon ce serait trop lent), et ensuite je peux saisir autant de phrase que je le souhaite.

    Ma question est donc de savoir avec quel moyen je peux :
    • lancer mon programme une seule fois au départ
    • soumettre les chaines de caractères au fur et à mesure
    • récupérer le résultat
    • interrompre le processus quand je le souhaite


    J'ai pour le moment vu quelques docs concernant le ProcessBuilder, mais j'aimerai avoir votre avis.

    Merci

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Lancer ton programme:

    Runtime.exec

    soumettre des chaines:
    Process.getOutpuStream().write(....)

    Récupérer le résultat
    Process.getInputStream().read(....)

    Interrompre:
    souvent ce genre de process est prévu pour s'arrêter quand l'entrée standard est entièrement consommée, donc


    Process.getOutpuStream().close()

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut
    Merci pour la réponse.

    Voilà ce que j'ai pour le moment, cela fonctionne sur une chaîne de caractère simple.

    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
     
                ProcessBuilder pb = new ProcessBuilder(args1);
    	    pb = pb.redirectErrorStream(true); 
    	    Process p = pb.start();
     
    	    InputStream is = p.getInputStream(); 
    	    InputStreamReader isr = new InputStreamReader(is);
    	    BufferedReader br = new BufferedReader(isr);
     
    	    OutputStream os = p.getOutputStream(); 
    	    os.write(bytes);
    	    os.close();
     
    	    String ligne; 
     
    	    while (( ligne = br.readLine()) != null) { 
    		System.out.println(ligne);
    	    }
    Je souhaite parcourir un fichier ligne par ligne et soumettre chaque ligne à ce processus. J'ai modifié le code de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	    while ((line = buff.readLine()) != null) {
    		byte[] bytes = line.getBytes();
    		OutputStream os = p.getOutputStream(); 
    		os.write(bytes);
    		os.close();
    		//System.out.println(line);
    	    }
    Je ne récupère que le résultat de la premiere ligne. Que dois-je faire pour récupérer toutes les sorties de chaque ligne ?

    merci

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ben pourquoi tu fais ce close() dans la boucle?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 330
    Points : 93
    Points
    93
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Ben pourquoi tu fais ce close() dans la boucle?
    En effet cela fonctionne beaucoup mieux. Voilà mon 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
    22
    23
    24
    25
    26
    27
     
                ProcessBuilder pb = new ProcessBuilder(args1);
    	    pb = pb.redirectErrorStream(true); // on mélange les sorties du processus
    	    Process p = pb.start();
     
    	    InputStream is = p.getInputStream(); 
    	    InputStreamReader isr = new InputStreamReader(is);
    	    BufferedReader br = new BufferedReader(isr);
     
    	    OutputStream os = p.getOutputStream(); 
     
    	    while ((line = buff.readLine()) != null) {
    		String lc = line.toLowerCase();
    		byte[] bytes = lc.getBytes();
    		os.write(bytes);
    		os.write(13);
    		os.write(10);
    		//System.out.println(line);
    	    }
     
    	    while (( ligne = br.readLine()) != null) { 
    		System.out.println(ligne);
    	    }
     
    	    os.close();
    	    buff.close();
    	    p.destroy();

Discussions similaires

  1. Script qui permet d'executer un programme en ligne de commande?
    Par tagada_tagada dans le forum Langage
    Réponses: 2
    Dernier message: 17/11/2008, 18h24
  2. exécuter un programme en ligne de commande
    Par karamasov dans le forum Général Java
    Réponses: 8
    Dernier message: 17/09/2008, 16h52
  3. execution programme en ligne de commande
    Par Gothico dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/06/2007, 17h26
  4. Exécution programme en ligne de commande
    Par heddicmi dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 25/10/2006, 12h00
  5. Programme style ligne de commande
    Par inddzen dans le forum C
    Réponses: 12
    Dernier message: 31/08/2006, 16h53

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