Lors de l'exécution de commandes à l'aide de exec.Command(), il est possible d'exécuter des commandes contenant des pipes, vous permettant de enchaînez plusieurs commandes ensemble.
Par exemple, la commande suivante exécute ps cax et réussit :
out, err := exec.Command("ps", "cax").Output()
Cependant, la tentative de transfert de la sortie de ps cax vers grep myapp à l'aide de la commande suivante échoue :
out, err := exec.Command("ps", "cax | grep myapp").Output()
Pour résoudre ce problème, nous pouvons adopter une approche plus idiomatique approche utilisant des tuyaux dans Go :
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 retrieve the output of grep. res, _ := grep.Output() fmt.Println(string(res)) }
Dans cet exemple, nous créons deux structures exec.Cmd, une pour chaque commande, puis établissez un canal entre la sortie standard de ps et la sortie standard de grep. En démarrant ps en premier, nous nous assurons que sa sortie est disponible pour que grep puisse la consommer. Par la suite, nous exécutons grep et récupérons sa sortie, enchaînant efficacement les deux 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!