第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

當(dāng)退出代碼不為零時(shí),Golang exec.Command 返回 nil 錯(cuò)誤

當(dāng)退出代碼不為零時(shí),Golang exec.Command 返回 nil 錯(cuò)誤

Go
翻過高山走不出你 2023-07-04 15:05:50
我正在嘗試在 Golang 中運(yùn)行命令,但看起來它丟失了退出代碼,因?yàn)殄e(cuò)誤為零:func runCommand() []byte, error {  cmd := exec.Command("/bin/bash", "-c", "KUBECONFIG=/tmp/.kube/config helm version")  cmd.Stdin = os.Stdin  cmd.Stderr = os.Stderr  stdOut, err := cmd.StdoutPipe()  if err != nil {      return nil, err  }  if err := cmd.Start(); err != nil {      return nil, err  }  bytes, err := ioutil.ReadAll(stdOut)  if err != nil {      return nil, err  }  if err := cmd.Wait(); err != nil {      return nil, err  }  fmt.Println(string(bytes))  return bytes, nil}即使命令返回退出代碼 != 0,也會(huì)返回 nil。如果我輸入:$> /bin/bash -c KUBECONFIG=/tmp/.kube/config helm version$<$> echo $?$< 0如果我輸入:$> /bin/bash -c 'KUBECONFIG=/tmp/.kube/config helm version'$< ...connection refused$> echo $?$< 1所以我嘗試將命令用單引號括起來:cmd := exec.Command("/bin/bash", "-c", "'KUBECONFIG=/tmp/.kube/config helm version'")但后來我得到:/bin/bash: KUBECONFIG=/tmp/.kube/config helm version: No such file or directory(不用說 /tmp/.kube/config 就在那里,但我不認(rèn)為 no such 文件或目錄指的是它)。我究竟做錯(cuò)了什么?謝謝更新:事實(shí)證明我錯(cuò)了。事實(shí)上,我嘗試了兩個(gè)命令,出于某種原因,我確信失敗的是我上面提到的那個(gè),而第二個(gè)命令正在退出,狀態(tài)代碼不同于 0。代碼按預(yù)期工作,錯(cuò)誤不為零如果退出代碼!= 0。對此表示抱歉。
查看完整描述

1 回答

?
GCT1015

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊

看來你應(yīng)該能夠通過exec.ExitError, see?exec package獲得它。請注意,您可能需要 Go 1.12。這是一個(gè)可運(yùn)行的示例(但它不會(huì)在 go Playground 上為您提供實(shí)際的輸出):

package main


import (

? ? "fmt"

? ? "io/ioutil"

? ? "os"

? ? "os/exec"

)


func main() {

? ? cmd := exec.Command(`/bin/bash`, `-c`, `FOO=bar ls /foo`)

? ? cmd.Stdin = os.Stdin

? ? cmd.Stderr = os.Stderr

? ? stdOut, err := cmd.StdoutPipe()

? ? if err != nil {

? ? ? ? fmt.Println("Error 1")

? ? }

? ? if err := cmd.Start(); err != nil {

? ? ? ? fmt.Println("Error 2")

? ? }

? ? bytes, err := ioutil.ReadAll(stdOut)

? ? if err != nil {

? ? ? ? fmt.Println("Error 3")

? ? }

? ? if err := cmd.Wait(); err != nil {

? ? ? ? fmt.Println("Error 4")

? ? ? ? if exitError, ok := err.(*exec.ExitError); ok {

? ? ? ? ? ? fmt.Printf("Exit code is %d\n", exitError.ExitCode())

? ? ? ? }

? ? }

? ? fmt.Println(string(bytes))

}

在我的系統(tǒng)上打?。?/p>


$ go run main.go

ls: cannot access '/foo': No such file or directory

Error 4

Exit code is 2

如果這對您不起作用,也許值得遵循 @JimB 的建議并直接調(diào)用 helm ?Go 標(biāo)準(zhǔn)庫也應(yīng)該支持管道:


它包裝了 os.StartProcess 以便更輕松地重新映射 stdin 和 stdout、使用管道連接 I/O 以及進(jìn)行其他調(diào)整。



查看完整回答
反對 回復(fù) 2023-07-04
  • 1 回答
  • 0 關(guān)注
  • 223 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號