Heim >Backend-Entwicklung >Golang >Wie leite ich Eingaben in Go an exec.Command() um?
Eingabe umleiten mit exec.Command()
Das Ausgeben von Befehlen mit Eingabeumleitung in Go kann eine Herausforderung sein. Betrachten Sie die übliche Befehlszeilenoperation:
/sbin/iptables-restore < /etc/iptables.conf
Dieser Befehl weist iptables-restore an, seine Konfiguration aus /etc/iptables.conf zu lesen. Wie können wir dies mit exec.Command() von Go erreichen?
Fehlgeschlagene Versuche
Erste Versuche, den Pfad der Eingabedatei als Argumente zu übergeben oder den Dateinamen an stdin weiterzuleiten waren erfolglos.
// Fails cmd := exec.Command("/sbin/iptables-restore", "<", "/etc/iptables.conf") // Also fails cmd := exec.Command("/sbin/iptables-restore", "< /etc/iptables.conf") // Attempt to pipe file name into stdin // Fails cmd := exec.Command("/sbin/iptables-restore") stdin, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } err = cmd.Start() if err != nil { log.Fatal(err) } io.WriteString(stdin, "/etc/iptables.conf")
Lösung: Datei lesen und schreiben Inhalte
Um den Befehl erfolgreich auszuführen, müssen wir zuerst den Inhalt von /etc/iptables.conf lesen und diesen Inhalt dann in die StdinPipe() schreiben.
package main import ( "io" "io/ioutil" "log" "os/exec" ) func main() { bytes, err := ioutil.ReadFile("/etc/iptables.conf") if err != nil { log.Fatal(err) } cmd := exec.Command("/sbin/iptables-restore") stdin, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } err = cmd.Start() if err != nil { log.Fatal(err) } _, err = io.WriteString(stdin, string(bytes)) if err != nil { log.Fatal(err) } }
Das obige ist der detaillierte Inhalt vonWie leite ich Eingaben in Go an exec.Command() um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!