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

  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" };

  7. #7
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    47
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 47
    Par d�faut
    Yep, �a marche en rempla�ant le dernier /C par /K pour que �a continue apr�s le lancement de la commande :

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

    Petite question : Y-t-il un moyen de rendre ce code plus portable de fa�on � ce qu'il fonctionne � la fois sous Windows et sous Linux ?
    J'imagine qu'il faut tester un crit�re pour voir dans quel OS on se trouve...

  8. #8
    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
    non seulement tester l'os en cours, mais tester avec quoi travailler (xterm, gnome-terminal, autres?) Ton mod�le, par exemple, ne pourra pas marcher pour une commande lanc�e depuis un shell ssh par exemple, car l� la notion de fenetre n'existe pas et donc impossible d'ouvrir une nouvelle fenetre.

    Si tu veux �tre 100% g�n�rique, il faut lancer sipp directement (sans passer par des cmd.exe), prendre ses input / ouput (sur l'objet process) et faire toit m�me le travail de transfert de donn�es de ceux-ci vers l'�cran / clavier de ton process � toi.

  9. #9
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    47
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 47
    Par d�faut
    OK, dans un premier temps je pense lancer sipp indirectement via ce shell.

    Pour d�terminer dans quel os on se trouve, l� il suffit de voir les properties du syst�me, mais pour le shell...il faut que j'aille voir � la main dans l'arborescence le nom du shell ?

  10. #10
    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
    le probl�me, c'est que c'est pas le shell que tu dois lancer, mais une fenetre. "start" d�marre une fenetre s�par�, dans le cas du shell cmd.exe, sous linux, y a plusieurs applications de terminal (xterm, gnome-terminale, konsole, ....) disponible, mais leur disponibilit� d�pend (faut tester leur pr�sence). Le shell qu'elle ex�cutent c'est encore quelque chose � part (et � priori, t'as pas besoin de lancer un shell)

  11. #11
    Membre averti
    Inscrit en
    F�vrier 2003
    Messages
    47
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2003
    Messages : 47
    Par d�faut
    Ok, c'est en effet les applications de terminal plut�t que le shell qu'il faut que je regarde. Donc pour tester leur pr�sence je pourrai faire un truc du genre tester dans les r�pertoires des ex�cutables (/bin, /user/bin, ...) la pr�sence de xterm par exemple ?

  12. #12
    Candidat au Club
    Homme Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    F�vrier 2014
    Messages
    2
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux

    Informations forums :
    Inscription : F�vrier 2014
    Messages : 2
    Par d�faut Aide moi
    Bonjour ,

    S'il vous pla�t comment je peut lancer l'outil SIPp a distance via un code java sur eclipse ?

    OS: ubuntu 12.04 lts


    Merci d'avance.

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