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
Libérer: 2024-12-15 05:24:10
original
989 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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))
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal