Obtenez de sortie de la borne de commande à l'aide de Java
Pour certaines commandes du terminal, ils ne cessent de sortie. Par exemple, pour quelque chose qui est de la génération d'un fichier, il peut de sortie le pourcentage qu'il est complet.
Je sais comment appeler les commandes du terminal en Java à l'aide de
Process p = Runtime.getRuntim().exec("command goes here");
mais qui ne me fait pas vivre l'alimentation de la sortie de courant de la commande. Comment puis-je faire afin que je puisse faire un System.out.println()
toutes les 100 millisecondes, par exemple, pour voir ce que les plus récentes de sortie du processus.
Bien sûr, elle permet d'accéder à STDOUT et STDERR. Voir docs.oracle.com/javase/7/docs/api/java/lang/Process.html
Merci pour cela. Donc, pouvez-vous montrer un exemple de comment l'utiliser pour obtenir la sortie de toutes les 100 millisecondes?
Voir stackoverflow.com/questions/3643939/...
Une lecture obligatoire pour toute personne utilisant de l'Exécution.exec() javaworld.com/jw-12-2000/jw-1229-traps.html
Merci pour cela. Donc, pouvez-vous montrer un exemple de comment l'utiliser pour obtenir la sortie de toutes les 100 millisecondes?
Voir stackoverflow.com/questions/3643939/...
Une lecture obligatoire pour toute personne utilisant de l'Exécution.exec() javaworld.com/jw-12-2000/jw-1229-traps.html
OriginalL'auteur CodeGuy | 2013-02-16
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de lire
InputStream
du processus, voici un exemple:Modifier j'ai modifié le code comme suggéré ici pour recevoir le
errStream
avec lestdInput
Fin de débogage, vous pouvez lire l'entrée des octets au lieu d'utiliser
readLine
juste au cas où que le processus ne se termine pas les messages avecnewLine
Peut-être que la commande que vous êtes en cours d'exécution n'est pas sortie tout \r ou \n caractères (ce qui serait le signal de la BufferedReader qu'il a lu une ligne complète)? Peut-être qu'il ne génère pas de sortie dans certains modes de terminal server (essayez de tuyauterie, le résultat de "plus" et de voir ce que ça sorties)? Peut-être que la commande écrit sa sortie vers stderr vers stdout?
Il gèle en attente d'entrée, de sorte que soit votre processus ne se termine pas les données avec
newline
ou il ne pas écrire à lastdout
à tousvoir le code que j'ai posté ici pour les détails du code Java, j'ai essayé: stackoverflow.com/questions/14915290/...
Essayez exec avec mencoder directement. Aussi, spécifier la commande comme un String[] au lieu d'une seule Chaîne (dans le cas où les arguments contenant des espaces).
OriginalL'auteur iTech