Ausführen von Befehlen mit Pipes in Go mithilfe von exec.Command()
Beim Arbeiten mit der Funktion exec.Command() in Go können Benutzer Beim Versuch, Befehle auszuführen, die Pipes beinhalten, kann es zu Schwierigkeiten kommen. Während die Ausführung einfacher Befehle unkompliziert ist, kann die Verwendung von Pipes innerhalb dieser Befehle eine Herausforderung darstellen.
Problem:
In diesem Fall haben Benutzer beobachtet, dass der folgende Befehl erfolgreich ausgeführt wurde und gibt die Ausgabe des Befehls „ps“ aus:
out, err := exec.Command("ps", "cax").Output()
Der Versuch, eine Pipe innerhalb des Befehls zu verwenden, wie unten gezeigt, führt zu einem Fehler:
out, err := exec.Command("ps", "cax | grep myapp").Output()
Lösung:
Um dieses Problem anzugehen, sind zwei Ansätze zu berücksichtigen:
Eine Möglichkeit besteht darin, die gesamte Befehlszeile an Bash zu übergeben und es zu haben Führen Sie die Pipeline für Sie aus. Dieser Ansatz kann durch die Verwendung des folgenden Codes erreicht werden:
out, err := exec.Command("bash", "-c", "ps cax | grep myapp").Output()
Eine idiomatischere Art, mit dieser Situation umzugehen besteht darin, die Funktion exec.Command() zu verwenden, um zwei separate Befehle zu erstellen und dann deren Eingabe- und Ausgabestreams zu verbinden. Dies kann wie folgt erreicht werden:
package main import ( "fmt" "os/exec" ) func main() { grep := exec.Command("grep", "redis") ps := exec.Command("ps", "cax") // Get ps's stdout and attach it to grep's stdin. pipe, _ := ps.StdoutPipe() defer pipe.Close() grep.Stdin = pipe // Run ps first. ps.Start() // Run and get the output of grep. res, _ := grep.Output() fmt.Println(string(res)) }
In diesem Beispiel wird der Befehl „ps“ zuerst ausgeführt und seine Ausgabe wird an den Befehl „grep“ weitergeleitet, der die Ausgabe basierend auf „redis“ filtert " Zeichenfolge. Das Ergebnis wird dann auf der Standardausgabe ausgegeben.
Das obige ist der detaillierte Inhalt vonWie führe ich Piped-Befehle in Go mit exec.Command() aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!