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!