首页 > 后端开发 > Golang > 对于像'iptables-restore”这样的命令,如何正确地将输入重定向到 Go 中的'exec.Command”?

对于像'iptables-restore”这样的命令,如何正确地将输入重定向到 Go 中的'exec.Command”?

DDD
发布: 2024-12-11 17:50:16
原创
1068 人浏览过

How to Properly Redirect Input to `exec.Command` in Go for Commands Like `iptables-restore`?

带有输入重定向的 exec.Command

要从 Go 执行 bash 命令,exec.Command() 提供了一个简单的解决方案。然而,将输入重定向到命令可能是一个挑战。

考虑需要使用命令“/sbin/iptables-restore /iptables.conf”来更新 IPTables。尝试使用 exec.Command() 调用此命令已被证明是不成功的。

为了解决此问题,采用了提供文件名作为 cmd.StdinPipe() 输入的策略:

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")
登录后复制

然而,这种方法仍然无效。一个可行的解决方案是读取“/etc/iptables.conf”的内容并将其写入 cmd.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)
    }
}
登录后复制

以上是对于像'iptables-restore”这样的命令,如何正确地将输入重定向到 Go 中的'exec.Command”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板