首页 >后端开发 >Golang >如何在 Go 中正确地将输入重定向到 `exec.Command`?

如何在 Go 中正确地将输入重定向到 `exec.Command`?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-05 05:49:09428浏览

How to Properly Redirect Input to `exec.Command` in Go?

带有输入重定向的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn