exec.Command mit Eingabeumleitung
Um einen Bash-Befehl von Go aus auszuführen, bietet exec.Command() eine unkomplizierte Lösung. Allerdings kann die Umleitung der Eingaben an den Befehl eine Herausforderung sein.
Bedenken Sie, dass IPTables mit dem Befehl „/sbin/iptables-restore < /etc/iptables.conf“ aktualisiert werden müssen. Versuche, diesen Befehl mit exec.Command() aufzurufen, waren erfolglos.
Um dieses Problem zu beheben, wurde eine Strategie verwendet, bei der der Dateiname als Eingabe für cmd.StdinPipe() bereitgestellt wird:
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")
Dieser Ansatz blieb jedoch wirkungslos. Eine praktikable Lösung besteht darin, den Inhalt von „/etc/iptables.conf“ zu lesen und in cmd.StdinPipe():
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 für Befehle wie „iptables-restore' ordnungsgemäß an „exec.Command' um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!