Linux 有没有办法将bash脚本中的stdout存储到GO中的变量中?
我正在运行一个非常简单的bash脚本,其中只包含一些Go中的数据。我已经将其放入包装器中,并使用exec包来执行它。通过输出到我的终端,这可以很好地工作,但是,我找不到任何方法将其实际存储到Go中的变量中 我是新手,所以我的调试技能并不惊人。然而,我已经放置了一些基本的日志输出,试图缩小我需要从哪里获得输出的范围,但是没有用 运行bash的两个函数:Linux 有没有办法将bash脚本中的stdout存储到GO中的变量中?,linux,bash,go,Linux,Bash,Go,我正在运行一个非常简单的bash脚本,其中只包含一些Go中的数据。我已经将其放入包装器中,并使用exec包来执行它。通过输出到我的终端,这可以很好地工作,但是,我找不到任何方法将其实际存储到Go中的变量中 我是新手,所以我的调试技能并不惊人。然而,我已经放置了一些基本的日志输出,试图缩小我需要从哪里获得输出的范围,但是没有用 运行bash的两个函数: func main(){ _,结果,\:=runBash() log.Printf(“结果:,结果) } func runBash()(bool,
func main(){
_,结果,\:=runBash()
log.Printf(“结果:,结果)
}
func runBash()(bool,string,string){
cmd:=exec.Command(“/bin/sh”,“-s”)
cmd.Stdin=strings.NewReader(replicateRouter())
返回精加工(cmd)
}
func finishRunning(cmd*exec.cmd)(bool,string,string){
log.Printf(“正在运行:)
stdout,stderr:=bytes.NewBuffer(nil),bytes.NewBuffer(nil)
cmd.Stdout=os.Stdout
cmd.Stderr=os.Stderr
完成:=make(chan结构{})
延迟关闭(完成)
go func(){
为了{
挑选{
案例问题1:
在代码中,stdout和stderr从未分配给cmd
试试这个:
cmd.Stdout = stdout
cmd.Stderr = stderr
或者,尝试以下更简单的版本:
func main() {
out, err := exec.Command("date").Output()
if err != nil {
log.Fatal(err)
}
fmt.Printf("The date is %s\n", out)
}
最后,您可以“代理”到os.Stdout
package main
import (
"bytes"
"fmt"
"os/exec"
"io"
"os"
)
func main() {
stdout := new(bytes.Buffer)
stderr := new(bytes.Buffer)
_, _ = io.Copy(os.Stdout, stdout)
_, _ = io.Copy(os.Stderr, stderr)
cmd := exec.Command("date")
cmd.Stdout = stdout
cmd.Stderr = stderr
cmd.Run()
output := string(stdout.Bytes())
fmt.Printf("The date is %s\n", output)
}
打字错误?使用stderr和stdout而不是os.stderr和os.Stdin。是的。一旦我删除了os.stderr/&Stdin并替换了它们,它马上就可以工作了。我想使用os.stderr/in是如何在Go中不使用logging/fmt而将其打印到终端上。但是我们每天都会学到一些新的东西:)非常感谢,你是对的,我忘了o在我的代码中的任何地方分配stdout和stderr。现在我这样做了,我能够成功地将其放入结果中。我将尝试另一种方法。再次感谢,这让我非常痛苦!