在Go中执行shell命令

前端之家收集整理的这篇文章主要介绍了在Go中执行shell命令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在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()

但是,这并不能以一种我可以编程访问的方式捕获实际的标准输出或者错误 – 那些仍然打印到常规的stdout / stderr。我看到使用Pipe作为out或者err可以帮助别的地方,但没有一个例子。有任何想法吗?

该答案不代表Go标准库的当前状态。请查看@ Lourenco的答案以获得最新的方法

您的示例实际上并没有从stdout读取数据。这对我有用

package main

import (
   "fmt"
   "exec"
   "os"
   "bytes"
   "io"
)

func main() {
    app := "/bin/ls"
    cmd,err := exec.Run(app,[]string{app,"-l"},nil,exec.Pipe,exec.Pipe)

    if (err != nil) {
       fmt.Fprintln(os.Stderr,err.String())
       return
    }

    var b bytes.Buffer
    io.Copy(&b,cmd.Stdout)
    fmt.Println(b.String())

    cmd.Close()
}

猜你在找的Bash相关文章