Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melaksanakan Perintah dengan Pengalihan Input Menggunakan `exec.Command` Go?
Dalam Go, memanfaatkan fungsi exec.Command menyediakan cara yang berkuasa untuk melaksanakan arahan. Walau bagaimanapun, apabila ia datang untuk melaksanakan arahan dengan pengalihan masukan, memahami cara menggunakan exec.Command dengan betul adalah penting. Soalan ini meneroka cara untuk menjalankan perintah Bash mudah yang membaca daripada fail menggunakan exec.Command.
Objektifnya adalah untuk melaksanakan arahan berikut daripada Go:
/sbin/iptables-restore < /etc/iptables.conf
Arahan ini membaca konfigurasi IPTables daripada fail yang ditentukan dan menyegarkan IPTables. Walau bagaimanapun, menterjemah arahan ini terus ke dalam kod Go menggunakan exec.Command terbukti mencabar.
Soalan menggariskan beberapa percubaan yang tidak berjaya untuk melaksanakan perintah dengan exec.Command. Dua pendekatan biasa ialah:
Percubaan untuk melepasi pengendali ubah hala < sebagai hujah:
cmd := exec.Command("/sbin/iptables-restore", "<", "/etc/iptables.conf")
Percubaan untuk menyalurkan nama fail ke dalam input standard arahan:
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")
Kunci untuk berjaya melaksanakan arahan dengan pengalihan masukan terletak pada penggunaan gabungan ioutil.ReadFile dan exec.Command. Penyelesaian berikut menyelesaikannya:
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) } }
Dengan membaca kandungan fail konfigurasi IPTables dahulu dan kemudian menulisnya pada input standard arahan, kami melaksanakan operasi pengalihan input dengan berkesan.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Perintah dengan Pengalihan Input Menggunakan `exec.Command` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!