Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengalihkan Input ke `exec.Command` dengan betul dalam Go?
exec.Command dengan Input Redirection
Dalam Go, fungsi exec.Command membolehkan pelaksanaan perintah luaran. Untuk mengubah hala input ke dalam arahan melalui paip, kaedah StdinPipe mesti digunakan.
Pertimbangkan tugas berikut: menjalankan perintah "/sbin/iptables-restore < /etc/iptables.conf". Perintah ini mengemas kini IPTables berdasarkan fail konfigurasi, tetapi mengkonfigurasi pengalihan input menggunakan exec.Command boleh menjadi satu cabaran.
Percubaan pertama, exec.Command("/sbin/iptables-restore", "< ;", "/etc/iptables.conf"), salah tafsir < sebagai bendera perintah. Selain itu, menggunakan exec.Command("/sbin/iptables-restore", "< /etc/iptables.conf") mentafsir < sebagai hujah kepada IPTables dan mengakibatkan ralat.
Untuk menyelesaikan masalah ini, berikan data input secara eksplisit melalui paip stdin:
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) } }
Dengan kod ini, fail konfigurasi IPTables dibaca dan ditulis ke dalam cmd.StdinPipe(), mencapai ubah hala input yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Mengalihkan Input ke `exec.Command` dengan betul dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!