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
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!