我正在尝试在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。
答案 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)
}
答案 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))
}