在golang中运行系统命令,如perl中的system命令

时间:2016-07-18 23:04:58

标签: go

我正在尝试在golang中运行系统命令。我想将stdout直接打印到屏幕上。 在golang中我现在使用以下内容:

out, err := exec.Command(cmd).Output()
    if err != nil {
        fmt.Println("error occured")
        fmt.Printf("%s", err)
   }

这里我将输出存储到" out"变量,然后将其打印到屏幕上。但我想要的东西打印为普通的shell命令,如perl中的system()命令。

in perl:

system("ls -l");

我们不需要在这里存储任何东西。

golang中是否有一些命令,它完全模仿perl中的system()cmd。

2 个答案:

答案 0 :(得分:5)

函数Command返回Cmd结构,其中包含Stdout字段 您只需将操作系统Stdout附加到Cmd' s Stdout

示例:

cmd := exec.Command("date") // no need to call Output method here
cmd.Stdout = os.Stdout // instead use Stdout
cmd.Stderr = os.Stderr // attach Stderr as well

err := cmd.Run()
if err != nil {
    log.Fatal(err)
}

参考:Command documentation

答案 1 :(得分:1)

我看不到你想要的任何内置选项 - 但是7线功能就足够了,我相信:

func system(cmd string, arg ...string) {
    out, err := exec.Command(cmd, arg...).Output()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(out))
}

然后你可以简单地称之为:

system("ls", "-l")

所以一个完整的例子就是:

package main

import (
    "fmt"
    "log"
    "os/exec"
)

func main() {
    system("ls", "-l")
}

func system(cmd string, arg ...string) {
    out, err := exec.Command(cmd, arg...).Output()
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(out))
}