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
Freigeben: 2024-12-15 05:24:10
Original
990 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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))
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage