Maison >développement back-end >Golang >Comment canaliser correctement les sorties de commande dans « exec.Command() » de Go ?

Comment canaliser correctement les sorties de commande dans « exec.Command() » de Go ?

DDD
DDDoriginal
2024-12-15 05:24:10993parcourir

How to Properly Pipe Command Outputs in Go's `exec.Command()`?

Comment rediriger les résultats dans exec.Command() de Go pour les chaînes de commandes

Lors de l'utilisation de exec.Command() pour exécuter des commandes dans Go, rediriger la sortie d'une commande à un autre peut être difficile.

Considérez l'exemple suivant :

out, err := exec.Command("ps", "cax").Output() // Works and prints command output

Cependant, lorsque en essayant de rediriger la sortie de ps vers grep, la commande échoue avec un état de sortie de 1 :

out, err := exec.Command("ps", "cax | grep myapp").Output() // Fails

Solution de tuyauterie idiomatique

Pour résoudre le problème, une approche plus idiomatique consiste à utiliser exec.Command() pour chaque commande et connectez directement leurs flux d’entrée/sortie standard. Voici comment :

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    grep := exec.Command("grep", "redis")
    ps := exec.Command("ps", "cax")

    // Connect ps's stdout to grep's stdin.
    pipe, _ := ps.StdoutPipe()
    defer pipe.Close()
    grep.Stdin = pipe

    // Start ps first.
    ps.Start()

    // Run and get the output of grep.
    res, _ := grep.Output()

    fmt.Println(string(res))
}

Cela vous permet d'exécuter plusieurs commandes et de canaliser leurs entrées et sorties selon vos besoins, offrant ainsi un moyen flexible de gérer les chaînes de commandes.

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