Maison >développement back-end >Golang >Comment puis-je diffuser une sortie de commande partielle en temps réel pendant l'exécution ?

Comment puis-je diffuser une sortie de commande partielle en temps réel pendant l'exécution ?

DDD
DDDoriginal
2024-12-27 09:04:11835parcourir

How Can I Stream Partial Command Output in Real-Time During Execution?

Progression de la sortie des commandes en streaming

Dans le processus d'exécution des commandes, il est souvent nécessaire de diffuser la sortie à la fois vers son emplacement de sortie désigné et un fichier journal en temps réel. Cependant, lorsqu'il s'agit de processus longs, la méthode cmd.StdoutPipe fournit uniquement le résultat final sous forme de chaîne. Cet article explique comment activer la diffusion en continu d'une sortie partielle pendant le processus d'exécution de la commande.

L'exemple fourni dans la question utilise bufio.NewScanner pour lire la sortie standard via un canal. Une idée fausse courante est qu’il se lit ligne par ligne. En réalité, il lit les entrées par nouvelles lignes telles que définies par la fonction bufio.ScanLines. Si la commande exécutée ne produit pas de nouvelles lignes, la sortie ne sera pas renvoyée immédiatement.

Solutions de contournement :

Pour surmonter cette limitation, envisagez des approches alternatives :

  1. bufio.Split(bufio.ScanRunes): Cette méthode permet la lecture par runes (caractères), assurant le retour de la sortie chaque fois qu'une nouvelle rune devient disponible.
  2. Lecture manuelle des octets/des runes : Cela implique la création d'un tableau tampon et la lecture répétée d'un octet ou d'une tranche d'octets. représentant une rune complète.

Il est crucial de lire à la fois la sortie standard et l'erreur pour éviter un blocage potentiel dans le processus enfant en raison de tampons pleins. Par défaut, la sortie standard et les flux d'erreurs du processus enfant sont ignorés. Cependant, des messages d'erreur manquants peuvent survenir si le flux d'erreur standard n'est pas lu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn