带有输入重定向的 exec.Command
在 Go 中,exec.Command 函数可以执行外部命令。要通过管道将输入重定向到命令,必须使用 StdinPipe 方法。
考虑以下任务:运行命令“/sbin/iptables-restore /iptables.conf”。此命令根据配置文件更新 IPTable,但使用 exec.Command 配置输入重定向可能是一个挑战。
第一次尝试,exec.Command("/sbin/iptables-restore", "< ;”、“/etc/iptables.conf”),误解了
要解决此问题,请通过 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) } }
使用此代码,将读取 IPTables 配置文件并写入cmd.StdinPipe(),实现所需的输入重定向。
以上是如何在 Go 中正确地将输入重定向到 `exec.Command`?的详细内容。更多信息请关注PHP中文网其他相关文章!