当前位置: 首页 > 面试题库 >

具有输入重定向的Golang执行命令

狄钧
2023-03-14
问题内容

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

/sbin/iptables-restore < /etc/iptables.conf

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

cmd := exec.Command("/sbin/iptables-restore", "<", "/etc/iptables.conf")
// And also
cmd := exec.Command("/sbin/iptables-restore", "< /etc/iptables.conf")

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

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

这也不起作用,不足为奇。我 可以 使用stdin传递文件的内容,但是当我只能告诉iptables-
restore要读取哪些数据时,这似乎很愚蠢。那么我怎么可能去运行命令/sbin/iptables-restore < /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)
    }
}


 类似资料:
  • 本文向大家介绍Windows cmd命令行输入输出重定向问题,包括了Windows cmd命令行输入输出重定向问题的使用技巧和注意事项,需要的朋友参考一下 最近学校的网比较搓,DNS天天挂,出口带宽天天堵,NAT后的总出口带宽也才4MB/s(来源:360测速),唉,不亲身体会鬼才知道一堆人共享这个带宽是什么感觉。 废话不多说了,在Unix下重定向用着感觉很high,现在想把win下的nslooku

  • 问题内容: 我想从Go执行perforce命令行“ p4”以执行登录工作。“ p4登录”要求用户输入密码。 如何在Go中运行需要用户输入的程序? 以下代码不起作用。 问题答案: 从os / exec.Command文档: 在执行命令之前,设置命令的Stdin字段。

  • 我想为我的服务器做一些简单的日志记录,它是一个运行在Docker容器中的小Flask应用程序。 这是Dockerfile 正如您在最后一行中看到的,我将stderr和stdout重定向到一个文件。现在我运行这个容器并将外壳放入其中 并观察以下事情: 服务器正在运行,网站正在运行 没有 产生: 但是没有日志...然而,如果我到容器,我可以看到应用程序在控制台中生成输出。 使用Docker时如何正确重

  • 1. Shell 重定向 1.1 Shell 重定向是什么 我们在之前章节有学习 echo/printf 来将我们的需求输出,此时就是我们将系统的返回输出到我们标准终端,使得我们能够看到正常的输出的结果,Unix 命令默认的输入设备即 stdin 为键盘,标准和错误设备即 stdout 为显示器,我们利用重定向可以将输入改为文件,或者将输出重新定向到其他设备或文件中。 1.2 为什么要用重定向 我

  • 问题内容: 我正在尝试将printf函数的输出重定向到Windows上的文件。我在python3中使用ctypes来调用函数。我的代码是: 但是,当我从Eclipse运行代码时,屏幕上显示以下内容: …以及TEST.txt中的以下内容 当我从cmd运行此命令时,这是屏幕上显示的内容: ..这是在TEST.txt中: 当我注释掉第二条语句时,例如 在Eclipse的屏幕上: …并在TEST.txt文

  • 问题内容: 我想为服务器做一些简单的日志记录,这是一个在Docker容器中运行的小型Flask应用程序。 这是Dockerfile 正如您在最后一行看到的那样,我将stderr和stdout重定向到文件。现在我运行这个容器并将其装入其中 并注意以下几点: 服务器正在运行,网站正在运行 没有 产量: 但是没有日志…但是,如果我进入容器,则可以在控制台中看到该应用程序正在生成输出。 使用Docker时