Ouvrir une nouvelle fenêtre shell avec un nouveau processus? - Java - Programmation
Marsh Posté le 02-05-2006 à 17:11:34
Dans ton cas précis, je te conseille de t'orienter vers un lib toute faite pour les appels telnet.
La gestion des process en Java, c'est le Mal.
Déjà, si tu évitais d'enterrer l'exception, il se pourrait que tu obtiennes plus d'info.
Chuis pas sûr que tu puisses obtenir la fenêtre DOS. Tu t'orientes dans la mauvaise direction à mon avis (appeler le dos prompt pour lancer un client telnet... trop de surcouches dans un contexte trop dégueu).
HTH
Marsh Posté le 02-05-2006 à 18:27:17
Je n'ai rien qui sort en exception c'est ça le plus étrange...
Tout ce qui est avant la commande "Process p = Runtime.getRuntime().exec("cmd /c telnet "+ip);" et après est correctement exécutée, par contre la commande ne donne rien en sortie.
Où est sensé s'afficher la sortie? Même si c'est dans la même fenêtre ce n'est pas grave, ce que j'aimerai c'est pouvoir effectuer normalement mon telnet...
Merci pour tes conseils je vais chercher voir les lib telnet si il y a des choses intéressantes...
Marsh Posté le 02-05-2006 à 18:56:11
Salut,
Faut lire la doc:
http://java.sun.com/j2se/1.4.2/doc [...] ocess.html
"The Runtime.exec methods may not work well for special processes on certain native platforms, such as native windowing processes, daemon processes, Win16/DOS processes on Microsoft Windows, or shell scripts. The created subprocess does not have its own terminal or console. All its standard io (i.e. stdin, stdout, stderr) operations will be redirected to the parent process through three streams (Process.getOutputStream(), Process.getInputStream(), Process.getErrorStream())."
Marsh Posté le 04-05-2006 à 05:51:32
si tu veux inviter la fenetre dos et executer telnet je peux t assurer que le code que t'as taper est juste et que le processus est executé mais sans affichage de la fenetre dos c parceque tu utilise le path javaw.exe (qui permet l'execution des commandes dos sans afficher la fenetre) mais si tu utilise le path java.exe cela sera possible
Marsh Posté le 04-05-2006 à 15:43:57
Ok donc j'ai utilisé le programme JTA qui est en Java et supporte Telnet et SSH
La commande pour l'exécuter :
Runtime.getRuntime().exec("java -jar jta26.jar "+hostname);
Dommage qu'il ne soit pas possible de passer le nom d'utilisateur et le mot de passe en paramètre
Marsh Posté le 04-05-2006 à 16:18:26
XK a écrit : Ok donc j'ai utilisé le programme JTA qui est en Java et supporte Telnet et SSH |
C'est vraiment n'importe quoi !!!
Quand tu veux utiliser un composant java, tu ne demandes pas au système d'exploitation de relancer une JVM, tu utilises les classes du composant directement !
Marsh Posté le 04-05-2006 à 23:26:40
XK a écrit : |
Marsh Posté le 09-05-2006 à 11:17:40
Bidem a écrit : C'est vraiment n'importe quoi !!! |
Je le sais bien mais je veux que ce soit exécuté bien séparément du code serveur et la gestion des Threads ce n'est pas mon fort
Marsh Posté le 22-05-2006 à 22:19:30
Plusieurs conseils :
1) Il se trouve que pour une raison que j'ignore, les processus sont lancés soit depuis une console, soit depuis <pas une console>... or les processus en général ne flushent pas bien leur sortie qd ils ne sont pas lancés depuis une console.
Conséquence : tu peux parfois bloquer sur une attente de sortie d'un processus alors que ce dernier a bien écrit sur la sortie... C'est difficile, car il faut lancer le processus fils avec les options ad-hoc, qui dépendent de ce dernier, pour qu'il flush bien. Exemple : j'arrive à bien récupérer la sortie d'un processus python si je le lance avec les options -i -u. Sinon, nada.
2) Je te conseille vivement l'utilisation des classes Telnet de Apache http://jakarta.apache.org/commons/net/
3) ...et aussi (pub perso) le projet yactu qui permet de lire facilement un flux de sortie de processus (donc un flux d'entrée pour java) avec des timeout, par exemple, pour éviter d'attendre un temps infini, mais aussi des regexps etc.
Laurent Ploix
Marsh Posté le 02-05-2006 à 16:20:37
Bonjour
Dans mon programme java en mode texte j'exécute une commande pour ouvrir une session telnet sur une machine distante. Etrangement aucune nouvelle fenetre ne s'ouvre et pas de traces de mon processus...
if (mess.startWith("telnet" ))
{
try {
Process p = Runtime.getRuntime().exec("cmd /c telnet "+ip);
} catch (IOException e) {}
}
Comment faire pour que le processus que j'appel se lance dans une nouvelle fenetre shell?
Merci
Message édité par XK le 02-05-2006 à 16:27:57