2017-06-10 78 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