加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Go中执行shell命令

发布时间:2020-12-15 19:27:42 所属栏目:安全 来源:网络整理
导读:我想在Go中执行一个shell命令,并将生成的输出作为一个字符串在我的程序中。我看到了 Rosetta Code版本: package mainimport "fmt"import "exec"func main() { cmd,err := exec.Run("/bin/ls",[]string{"/bin/ls"},[]string{},"",exec.DevNull,exec.PassThr
我想在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()
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读