Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengalihkan Input ke exec.Command() dalam Go?
Mengubah hala Input dengan exec.Command()
Mengeluarkan arahan dengan pengalihan masukan dalam Go boleh menjadi satu cabaran. Pertimbangkan operasi baris arahan biasa:
/sbin/iptables-restore < /etc/iptables.conf
Arahan ini memberitahu iptables-restore untuk membaca konfigurasinya daripada /etc/iptables.conf. Bagaimanakah kita boleh mencapai ini dengan exec.Command() Go?
Percubaan Gagal
Percubaan awal untuk lulus laluan fail input sebagai argumen atau paipkan nama fail ke stdin tidak berjaya.
// Fails cmd := exec.Command("/sbin/iptables-restore", "<", "/etc/iptables.conf") // Also fails cmd := exec.Command("/sbin/iptables-restore", "< /etc/iptables.conf") // Attempt to pipe file name into stdin // Fails 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")
Penyelesaian: Membaca dan Menulis Kandungan Fail
Untuk melaksanakan arahan dengan jayanya, kita mesti membaca kandungan /etc/iptables.conf dahulu dan kemudian menulis kandungan tersebut ke 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) } }
Atas ialah kandungan terperinci Bagaimana untuk Mengalihkan Input ke exec.Command() dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!