登录
首页 >  Golang >  Go问答

带有输入重定向的 exec.Command

来源:Golang技术栈

时间:2023-04-11 17:29:50 414浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《带有输入重定向的 exec.Command》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到golang等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

我正在尝试从我的 Go 代码中运行一个相当简单的 bash 命令。我的程序写出一个 IPTables 配置文件,我需要发出一个命令来使 IPTables 从这个配置中刷新。这在命令行中非常简单:

/sbin/iptables-restore

但是,我一生都无法弄清楚如何使用 exec.Command() 发出此命令。我尝试了一些方法来实现这一点:

cmd := exec.Command("/sbin/iptables-restore", "

毫不奇怪,这些都不起作用。我还尝试通过将文件名管道输入到标准输入来将文件名输入命令:

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")

这也不起作用,不足为奇。我 可以 使用标准输入管道输入文件的内容,但是当我可以告诉 iptables-restore 要读取哪些数据时,这似乎很愚蠢。那么我怎样才能让 Go 运行命令/sbin/iptables-restore 呢?

正确答案

首先读取此/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)
    }
}

理论要掌握,实操不能落!以上关于《带有输入重定向的 exec.Command》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>