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
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!