2010-07-20 4 views

Répondre

1

Quel genre de réaction parlez-vous? Le processus écrit-il sur sa sortie standard et/ou sur l'erreur standard? Si oui, je soupçonne Process.getInputStream et Process.getErrorStream sont ce que vous cherchez. Lire à partir de ces deux et réagir en conséquence. Notez que vous souhaiterez peut-être lire les deux à partir de threads différents, afin d'éviter le tampon individuel pour l'un ou l'autre flux de se remplir.

Alternativement, si vous n'avez pas besoin des deux séparément, laissez redirectErrorStream dans ProcessBuilder comme faux, donc les flux d'erreur et de sortie sont fusionnés.

1

Vous devez démarrer un thread qui lit à partir du Process.getInputStream() et getErrorStream() (ou bien utiliser ProcessBuilder.redirectErrorStream(true)) et le gérer lorsque quelque chose apparaît dans le flux. Il y a plusieurs façons de le gérer - la bonne façon dépend de la façon dont les données sont utilisées. S'il vous plaît dites plus de détails. Voici un exemple concret: SbtRunner utilise ProcessRunner pour envoyer des commandes à une application de ligne de commande et attendre la fin de l'exécution de la commande (l'application affichera ">" lorsqu'une commande est terminée). Il y a un certain indirection qui se passe pour le rendre plus facile à lire du processus sortie (la sortie est écrite à un MulticastPipe d'où il est ensuite lu par un OutputReader).

+0

Merci pour le lien, je vais vérifier que sur – eric2323223

Questions connexes