在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO  Linux/ golang獲取nginx版本

golang獲取nginx版本

我用go的 exec.command執(zhí)行/usr/local/nginx/sbin/nginx -v 命令獲取版本信息,取不到任何返回結果,執(zhí)行redis -v mysql -v等,都能獲取正確的結果,且我在終端手動執(zhí)行nginx -v是沒有任何問題的,請教各位這是什么原因? 或者還有其他辦法能取到嗎?

cmd := exec.Command("/usr/local/nginx/sbin/nginx", "-v")
cmd.SysProcAttr = &syscall.SysProcAttr{
    Setpgid:true,
}
stdout, err := cmd.StdoutPipe()
if err != nil {
    //log.Fatal(err)
    fmt.Println(err)
}
// 保證關閉輸出流
defer stdout.Close()
// 運行命令
if err := cmd.Start(); err != nil {
    fmt.Println(err)
}
// 讀取輸出結果
opBytes, err := ioutil.ReadAll(stdout)
if err != nil {
    fmt.Println(err)
}
if err := cmd.Wait(); err != nil {
    fmt.Println(err)
}
return string(opBytes)
回答
編輯回答
替身

nginx -v是向stderr寫入了數(shù)據(jù),所以你從stdout是拿不到數(shù)據(jù)的。可以在shell環(huán)境中驗證下,nginx -v 2> ./version.txt

知道了上面這點,通過exec.Command拿到這個信息也就容易了。

cmd := exec.Command("nginx", "-v")
cmd.SysProcAttr = &syscall.SysProcAttr{
    Setpgid: true,
}

out, err := cmd.CombinedOutput()
if err != nil {
    fmt.Fprintln(os.Stderr, err)
}
fmt.Println(string(out))

nginx -v為什么不向stdout寫入數(shù)據(jù)呢?確實比較奇怪

2017年1月19日 03:15