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

API standards et tierces Java Discussion :

[Runtime] Shell et flux d'entrée sortie


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut [Runtime] Shell et flux d'entrée sortie
    Bonjour,

    Voilà, Pour l'instant j'écris le truc suivant pour windows : lancer une fenêtre shell (cmd), puis lancer dedans une commande système (sipp, un programme dans le path). Il faut donc récupérer le flux d'entrée de ce process pour écrire dedans c'est bien ça ? On aurait donc un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Runtime r = Runtime.getRuntime();
    String[] args = { "cmd.exe", "/C", "start cmd " };
     
    try {
           Process p = r.exec(args);
     
           BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
           bw.write("sipp");
           bw.close();
    }
    Le problème c'est que dans la fenêtre shell qui s'ouvre, rien ne se passe... Au passage, est-ce que passer par Runtime est la bonne méthode pour lancer une application externe ? Y-a-t-il mieux ?

    Merci d'avance.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pourquoi lancer cmd.exe plutot que sipp directement? Parce que là, tu lance cmd à qui tu demande de lance cmd et à qui t'essaie de faire croire qu'on a écrit sipp sur la ligne de commande. Hors le stream de ton process, il me semble est limité au premier cmd.

  3. #3
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut
    Eh bien l'application s'exécute en mode console, et j'aimerais laisser à l'utilisateur le loisir d'interagir avec la fenetre console qui s'ouvrirait. Si je fais directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String[] args = { "cmd.exe", "/C", "start sipp" };
     
    try {
           Process p = r.exec(args);
           .....
    }
    Une fenetre shell s'ouvre, lance l'appli, et se referme aussitôt. Donc c'est plus une question concernant Windows. En regardant l'aide de start, je n'ai pas trouvé un moyen d'empêcher cette fenêtre de se ferme, ce qui nous ramène à ma première question.

    Mais je me demandais : comment faire pour lancer cette appli dans une fenetre console autonome et ce, indépendemment de la plateforme cible. Ici, c'est du Windows, donc je fais cmd.exe, mais sur du Linux ?

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    sous linux: xterm, gnome-terminal, konsole suivant ce qui est disponible.


    Pour ton problème de console qui disparait avant que l'application sipp ne se termine et ne permet pas d'interagir, retire ce "start", car d'après la doc:

    START

    Start a specified program or command in a separate window.
    Ca combiné au /C:

    /C Carries out the command specified by string and then terminates
    est la source de tes problèmes. Ceci devrait suffir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String[] args = { "cmd.exe", "/C" "sipp" };
     
    try {
           Process p = r.exec(args);
           .....
    }
    Si tu veux garder la console après l'arret de sipp, remplace le /C par /K

  5. #5
    Membre averti
    Inscrit en
    Février 2003
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 47
    Par défaut
    En fait, j'utilise le start (separate window) car l'appli en question est justement une appli console.
    En lançant comme tu dis ("cmd.exe", "/C" "sipp" } ), rien n'est affiché. Pour prendre un exemple, prenons à la place de sipp ipconfig :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String[] args = { "cmd.exe", "/C", "ipconfig" };
     
    try {
           Process p = r.exec(args);
           .....
    }
    En lançant ça, je n'ai rien qui s'affiche.
    EDIT : Je précise que je lance l'archive jar de mon projet dans un shell :
    > java -jar mon_projet.jar
    C'est dans ce shell que rien n'est affiché lors de l'exec d'ipconfig.

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    par défaut, quand tu lance un process c'est à tout de pomper son outputstream pour l'afficher ou tu veux, et de remplir le inputstream avec les commande à envoyer. T'auras peut -être plus de chance en bidouillant comme çà:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] args = { "cmd.exe", "/C", "start", "cmd.exe", "/C", "sipp" };

Discussions similaires

  1. Livre sur les flux d'entrée/sortie
    Par oodini dans le forum Livres
    Réponses: 3
    Dernier message: 04/04/2014, 17h41
  2. Réponses: 0
    Dernier message: 24/04/2012, 21h30
  3. Flux d'entrée/sortie par référence.
    Par max_batteur_fou dans le forum C++
    Réponses: 3
    Dernier message: 13/01/2011, 23h54
  4. Flux entrée sortie avec Struts
    Par stef_ich dans le forum Struts 1
    Réponses: 0
    Dernier message: 10/04/2010, 14h57
  5. Flux entrée sortie et exceptions
    Par Magicien d'Oz dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 07/07/2006, 05h20

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