Beim Ausführen von Befehlen mit exec.Command() ist es möglich, Befehle auszuführen, die Pipes enthalten, sodass Sie dies tun können Verketten Sie mehrere Befehle miteinander.
Zum Beispiel führt der folgende Befehl ps cax und aus Erfolgreich:
out, err := exec.Command("ps", "cax").Output()
Der Versuch, die Ausgabe von ps cax mit dem folgenden Befehl an grep myapp weiterzuleiten, schlägt jedoch fehl:
out, err := exec.Command("ps", "cax | grep myapp").Output()
Um dieses Problem zu lösen, können wir eine idiomatischere Vorgehensweise anwenden Ansatz mit Pipes in 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)) }
In diesem Beispiel erstellen wir zwei exec.Cmd-Strukturen, eine für jeden Befehl. und dann eine Pipe zwischen der Standardausgabe von ps und der Standardausgabe von grep einrichten. Indem wir ps zuerst starten, stellen wir sicher, dass seine Ausgabe für grep zur Nutzung verfügbar ist. Anschließend führen wir grep aus und rufen die Ausgabe ab, wodurch die beiden Befehle effektiv miteinander verkettet werden.
Das obige ist der detaillierte Inhalt vonWie führt man Piped-Befehle effektiv mit „exec.Command()' von Go aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!