Rediriger stdin et stdout en Java
Je suis en train de rediriger l'entrée standard stdin et stdout d'un sous-processus en java, finalement, je vais avoir la sortie aller à un JTextArea ou quelque chose.
Voici mon code actuel,
Process cmd = Runtime.getRuntime().exec("cmd.exe");
cmd.getOutputStream().write("echo Hello World".getBytes());
cmd.getOutputStream().flush();
byte[] buffer = new byte[1024];
cmd.getInputStream().read(buffer);
String s = new String(buffer);
System.out.println(s);
La sortie ressemble à ceci:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\(Current Directory)>
Je m'attends à voir le "Hello World" de la chaîne de sortie.
Peut-être parce que le processus parent n'est pas de rester en vie assez longtemps?
J'aimerais aussi être en mesure d'envoyer et de recevoir des commandes multiples.
OriginalL'auteur Josh | 2012-05-02
Vous devez vous connecter pour publier un commentaire.
Vous avez tenté d'écrire dans le flux de sortie avant de tenter de les écouter sur le flux d'entrée, il est donc logique que vous voyez rien. Pour ce faire, vous aurez besoin d'utiliser des threads séparés pour vos deux flux.
c'est à dire,
Et vous ne devriez pas ignorer le flux d'erreur, soit, mais devrait avaler, car l'ignorant parfois les faire frire vos processus, car il peut manquer d'espace tampon.
vous dites qu'il “vous avez tenté d'écrire dans le flux de sortie avant de tenter de les écouter sur le flux d'entrée, il est donc logique que vous voyez n'est rien”. Je ne comprends pas pourquoi la lecture de après, la commande a été écrit conduirait à une courte lecture. En fait, vous dites: "ne rien voir", mais au moins il voit
cmd.exe
'bannière et rapide. J'ai l'impression que si il a lu encore, il devrait voir le reste. Ce que je suis absent?OriginalL'auteur Hovercraft Full Of Eels
Aujourd'hui
Runtime.getRuntime().exec()
est déconseillé (à toutes fins pratiques). Mieux utiliser le ProcessBuilder classe; en particulier, sonstart()
méthode retourne un Processus objet avec des méthodes pour accéder à l'entrée standard stdin et stdout flux, qui peut être redirigé partout où vous en avez besoin. Jetez un oeil à ce post pour plus de détails.OriginalL'auteur Óscar López