Heim >Backend-Entwicklung >Golang >Wie leitet man Befehlsausgaben in Gos „exec.Command()' richtig weiter?

Wie leitet man Befehlsausgaben in Gos „exec.Command()' richtig weiter?

DDD
DDDOriginal
2024-12-15 05:24:10993Durchsuche

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

So leiten Sie Ergebnisse in Gos exec.Command() für Befehlsketten weiter

Bei Verwendung von exec.Command() zum Ausführen von Befehlen in Go wird die Ausgabe eines Befehls weitergeleitet Einem anderen Befehl zu geben, kann eine Herausforderung sein.

Betrachten Sie das folgende Beispiel:

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

Allerdings Beim Versuch, die Ausgabe von ps an grep weiterzuleiten, schlägt der Befehl mit dem Exit-Status 1 fehl:

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

Idiomatische Piping-Lösung

Um das Problem zu lösen, besteht ein idiomatischerer Ansatz darin Verwenden Sie exec.Command() für jeden Befehl und verbinden Sie ihre Standard-Eingabe-/Ausgabeströme direkt. So geht's:

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))
}

Dadurch können Sie mehrere Befehle ausführen und deren Ein- und Ausgaben nach Bedarf weiterleiten, was eine flexible Möglichkeit zur Handhabung von Befehlsketten bietet.

Das obige ist der detaillierte Inhalt vonWie leitet man Befehlsausgaben in Gos „exec.Command()' richtig weiter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn