Maison >développement back-end >Golang >Comment obtenir une sortie en temps réel des commandes Shell dans Go ?
Problème :
Lors de l'exécution d'une commande shell de longue durée dans Go en utilisant os/exec, comment pouvez-vous récupérer la sortie en temps réel et la traiter au fur et à mesure disponible ?
Solution :
Utiliser stderr au lieu de stdout :
ffmpeg est connu pour afficher des messages de diagnostic sur stderr au lieu de stdout. Par conséquent, connectez-vous à stderr lors de la création de l'objet de commande au lieu de stdout.
Lisez la sortie de stderr en continu :
Créez un bufio.Scanner pour stderr et utilisez la méthode Scan pour lire la sortie ligne par ligne ou mot par word.
Gérer la sortie ligne par ligne :
Dans l'exemple de code, un scanner.Split(bufio.ScanWords) est utilisé pour diviser la sortie sur les espaces. Ajustez le type de fractionnement en fonction de vos exigences de traitement.
Sortie du processus :
Manipulez la sortie de la manière souhaitée, par exemple en l'extrayant et en la traitant. informations de progression.
Exemple Code :
package main import ( "bufio" "fmt" "os/exec" "strings" ) func main() { args := "-i test.mp4 -acodec copy -vcodec copy -f flv rtmp://aaa/bbb" cmd := exec.Command("ffmpeg", strings.Split(args, " ")...) stderr, _ := cmd.StderrPipe() cmd.Start() scanner := bufio.NewScanner(stderr) scanner.Split(bufio.ScanWords) for scanner.Scan() { m := scanner.Text() fmt.Println(m) } cmd.Wait() }
Sortie :
Le code imprimera en continu les messages de sortie ffmpeg, tels que :
frame= 101 fps=0.0 q=28.0 size= 91kB time=00:00:04.13 bitrate= 181.2kbits/s
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!