go - 在 Go 中执行 shell 命令

标签 go shellexecute

我希望在 Go 中执行一个 shell 命令,并将结果输出作为我的程序中的字符串。我看到了Rosetta Code版本:

package main
import "fmt"
import "exec"

func main() {
  cmd, err := exec.Run("/bin/ls", []string{"/bin/ls"}, []string{}, "", exec.DevNull, exec.PassThrough, exec.PassThrough)
  if (err != nil) {
    fmt.Println(err)
    return
  }
  cmd.Close()

但这并没有以我可以通过编程方式访问的方式捕获实际的标准输出或错误——那些仍然打印到常规的标准输出/标准错误。我看到使用 Pipe 作为 out 或 err 可以在其他地方提供帮助,但没有示例说明如何这样做。有什么想法吗?

最佳答案

包“exec”是changed一点点。以下code为我工作。

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    app := "echo"

    arg0 := "-e"
    arg1 := "Hello world"
    arg2 := "\n\tfrom"
    arg3 := "golang"

    cmd := exec.Command(app, arg0, arg1, arg2, arg3)
    stdout, err := cmd.Output()

    if err != nil {
        fmt.Println(err.Error())
        return
    }

    // Print the output
    fmt.Println(string(stdout))
}

我希望这会有所帮助!

关于go - 在 Go 中执行 shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6182369/

相关文章:

go - 在结构(析构函数)变量上设置延迟的位置

delphi - 在继承原始控制台的过程中使用Delphi的ShellExecute()吗?

windows - Windows 注册表中的 Shell 和 ShellEx 有什么区别?

c++ - 使用 ShellExecute 打开 URL - C++ 中的 SW_SHOW MAXIMIZED 非事件窗口

windows - Shellexecute 是否会与启动进程共享环境变量

go - 开始,一流的功能和最佳实践

go - gl.DrawElements似乎使用了错误的索引

logging - Golang 记录器致命

go - 使用 Go Modules 时外部基准测试的最佳实践

svg - inkscape 外壳模式