j'ai commencé un processus dans mon code Java, ce processus prend un temps très long à courir et pourrait générer une sortie de temps en temps. Je dois réagir à chaque sortie quand elles sont générées, quelle est la meilleure façon de le faire?La meilleure façon de contrôler la sortie du processus ainsi que son exécution
Répondre
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.
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).
- 1. TeamBuild - Meilleure façon de diviser la sortie du projet
- 2. Meilleure façon de contrôler les paniers
- 3. comment rediriger la sortie ainsi que obtenir la sortie sur l'écran shell en même temps
- 4. Quelle est la meilleure façon d'exécuter un processus continu dans son propre thread?
- 5. copie Programatically un contrôle de contenu ainsi que son contenu
- 6. Meilleure façon d'automatiser un processus de publipostage
- 7. Obtenir la sortie d'un processus
- 8. La bonne façon de contrôler plusieurs threads
- 9. sélectionner des données ainsi que la somme d'une colonne
- 10. Programmation GPU pour contrôler la sortie DVI
- 11. La meilleure façon de regarder le processus (et les sous-processus) pour le système de fichiers read() I/O?
- 12. La meilleure façon d'afficher la sortie de la recherche de motif sur les fichiers texte?
- 13. ProcessStartInfo.UseShellExecute = true et en attente de la sortie du processus
- 14. La meilleure façon d'utiliser les éléments du dictionnaire que nous utilisons les avantages de la liste
- 15. Quelle est la meilleure façon/la plus flexible d'avoir la sortie XHTML de WCF?
- 16. La meilleure façon d'obtenir que certains groupes de une chaîne
- 17. Quelle est la meilleure façon de capturer la forme de sortie Scilab dans un format publiable?
- 18. La meilleure façon de « matérialiser vue »
- 19. La meilleure façon de vérifier alphanumérique Javascript
- 20. Démarrer un processus de manière synchrone et "diffuser" la sortie
- 21. Meilleure façon de vérifier la version du projet dépendant
- 22. Récupère la sortie du dernier processus sur le cube SSAS
- 23. Redirection de la sortie du processus forké vers le processus parent en C
- 24. Comment capturer la sortie du processus en C?
- 25. Comment synchroniser la sortie du sous-processus Python
- 26. La meilleure façon d'incorporer javascript en PHP?
- 27. Exécution d'un processus que l'utilisateur actuel d'un processus système
- 28. Sortie du processus de redirection vers stdout
- 29. La meilleure façon de descendre dans Jmeter?
- 30. Comment rediriger la sortie du processus vers System.String
Merci pour le lien, je vais vérifier que sur – eric2323223