2017-06-10 37 views
0

这里是我的代码:如何在golang中获得gcloud命令的结果?

package main 

import (
    "os/exec" 
    "log" 
    "fmt" 
) 

func main() { 
    out, err := exec.Command("bash", "-c", "gcloud auth application-default login").Output() 
    if err != nil { 
     log.Fatal(err) 
    } 
    fmt.Printf("The output is %s\n", out) 
} 

当我exec的这段代码是我打开我的浏览器与良好的网址... 但我想获得的URL。

当我键入此命令:

gcloud auth application-default login 

在我的壳,我有:

Your browser has been opened to visit: 

    https://accounts.google.com/o/oauth2/auth?redirect_uri=h*********************************** 

这就是我想获得在我的节目中出来的文字。

任何想法如何得到它?这里

编辑是3个thigns,我已经没有sucess

/* 
out, err := exec.Command("bash", "-c", "gcloud auth application-default login").CombinedOutput() 
if err != nil { 
    log.Fatal(err) 
} 
fmt.Printf("The output is %s\n", out) 

*/ 

cmd := exec.Command("bash", "-c", "gcloud auth application-default login") 
cmdReader, err := cmd.StderrPipe() 
if err != nil { 
    fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err) 
    os.Exit(1) 
} 

scanner := bufio.NewScanner(cmdReader) 
     go func() { 
    for scanner.Scan() { 
     fmt.Printf(" out | %s\n", scanner.Text()) 
    } 

}() 



out, err := exec.Command("bash", "-c", "gcloud auth application-default login").Output() 
if err != nil { 
    log.Fatal(err) 
} 
fmt.Printf("The date is %s\n", out) 

问候和感谢

+0

你的代码是正确的,可能是'gcloud'输出将会stderr,你可以尝试'CombinedOutput()'而不是'Output()'? – jeevatkm

+0

@jeevatkm我编辑似乎不工作:/ – user462794

回答

1

发现它为什么你的代码段不能按预期工作。

通常,CombinedOutput()Output()在给定命令完成后返回结果。

这里gcloud命令没有完成执行,所以我们必须实时阅读它。我测试了下面的代码片段,它的工作原理。

cmd := exec.Command("bash", "-c", "gcloud auth application-default login") 
stderr, err := cmd.StderrPipe() 
if err != nil { 
    log.Fatal(err) 
} 

// Start command 
if err = cmd.Start(); err != nil { 
    log.Fatal(err) 
} 

// prevent main() to exit before cmd completes 
defer cmd.Wait() 

// read cmd output and send it to stdout 
// repalce os.Stderr as per your need 
go io.Copy(os.Stdout, stderr) 

fmt.Println("Standby to read...") 
fmt.Println() 

这只是一种方法,实现你的。祝你好运!

+0

它的工作非常感谢 – user462794

0

即消息被打印到stderr,不标准输出测试。

+0

它似乎不是我编辑我的问题... – user462794