Heim >Backend-Entwicklung >Golang >Wie leite ich Eingaben in Go ordnungsgemäß an „exec.Command' um?
exec.Command mit Eingabeumleitung
In Go ermöglicht die Funktion exec.Command die Ausführung externer Befehle. Um Eingaben über eine Pipe in den Befehl umzuleiten, muss die StdinPipe-Methode verwendet werden.
Betrachten Sie die folgende Aufgabe: Ausführen des Befehls „/sbin/iptables-restore < /etc/iptables.conf“. Dieser Befehl aktualisiert die IPTables basierend auf einer Konfigurationsdatei, aber die Konfiguration der Eingabeumleitung mit exec.Command kann eine Herausforderung sein.
Der erste Versuch, exec.Command("/sbin/iptables-restore", "< ;", "/etc/iptables.conf") interpretiert das < falsch. als Befehlsflagge. Darüber hinaus interpretiert die Verwendung von exec.Command("/sbin/iptables-restore", "< /etc/iptables.conf") < als Argument für IPTables und führt zu einem Fehler.
Um dieses Problem zu beheben, stellen Sie die Eingabedaten explizit über die stdin-Pipe bereit:
package main import ( "io" "io/ioutil" "log" "os/exec" ) func main() { // Read the contents of the input file. bytes, err := ioutil.ReadFile("/etc/iptables.conf") if err != nil { log.Fatal(err) } // Create the command. cmd := exec.Command("/sbin/iptables-restore") // Get the stdin pipe. stdin, err := cmd.StdinPipe() if err != nil { log.Fatal(err) } // Start the command. err = cmd.Start() if err != nil { log.Fatal(err) } // Write the input data to the stdin pipe. _, err = io.WriteString(stdin, string(bytes)) if err != nil { log.Fatal(err) } // Ensure stdin is closed. err = stdin.Close() if err != nil { log.Fatal(err) } // Wait for the command to finish. err = cmd.Wait() if err != nil { log.Fatal(err) } }
Mit diesem Code wird die IPTables-Konfigurationsdatei gelesen und in cmd.StdinPipe() geschrieben, um die gewünschte Eingabeumleitung zu erreichen.
Das obige ist der detaillierte Inhalt vonWie leite ich Eingaben in Go ordnungsgemäß an „exec.Command' um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!