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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我在這個 Go 程序中使用 stderr 和 ioutil.ReadAll 得到

為什么我在這個 Go 程序中使用 stderr 和 ioutil.ReadAll 得到

Go
翻翻過去那場雪 2021-07-09 14:19:04
命令“psql”應(yīng)該拋出一個錯誤,我正在嘗試讀取 stderr 并在 Go 程序中打印它。我使用 ioutil.ReadAll 從 stderr 和 stdout 讀取數(shù)據(jù)。不幸的是,它根本不是從 stderr 讀取的。ioutil.ReadAll 返回一個錯誤,這不是我期望的錯誤。我得到的錯誤是read |0: bad file descriptor這是代碼。package mainimport (        "fmt"        "os/exec"        "io/ioutil")func main() {        cmd := exec.Command("psql")        stdout, err := cmd.StdoutPipe()        if err != nil {                fmt.Printf("Error: %s", err)        }        stderr, err := cmd.StderrPipe()        if err != nil {                fmt.Printf("Error: %s", err)        }        err = cmd.Start()        if err != nil {                fmt.Printf("Start error %s",err)        }        d := cmd.Wait()        if d != nil {                fmt.Println(d)        }        stdo,g := ioutil.ReadAll(stdout)        stde,f := ioutil.ReadAll(stderr)        if g != nil {                fmt.Println(g)        }        if f !=nil {                fmt.Println(f)        }        fmt.Printf("Standard err is %s \n", stde)        fmt.Printf("Standard out is %s \n",stdo)}
查看完整描述

1 回答

?
瀟瀟雨雨

TA貢獻1833條經(jīng)驗 獲得超4個贊

我發(fā)現(xiàn)通過實驗,我收到了錯誤,因為我正在打電話


   stdo,g := ioutil.ReadAll(stdout)

   stde,f := ioutil.ReadAll(stderr)


 d := cmd.Wait()

所以會發(fā)生什么是標(biāo)準(zhǔn)輸出,標(biāo)準(zhǔn)錯誤管道在cmd.Wait()返回后關(guān)閉。


下面是代碼注釋 cmd.StderrPipe()


// StderrPipe returns a pipe that will be connected to the command's

// standard error when the command starts.

// The pipe will be closed automatically after Wait sees the command exit.

所以很明顯,我們無法在 stdout 和 stderr 關(guān)閉后讀取它們。


我們也無法在命令開始之前讀取它們。所以我們必須把它們放在開始和等待之間。


這是修復(fù)該問題的代碼。


package main


import (

        "fmt"

        "os/exec"

        "io/ioutil"

)


func main() {

        cmd := exec.Command("psql")

        stdout, err := cmd.StdoutPipe()

        if err != nil {

                fmt.Printf("Error: %s", err)

        }

        stderr, err := cmd.StderrPipe()

        if err != nil {

                fmt.Printf("Error: %s", err)

        }

        err = cmd.Start()

        if err != nil {

                fmt.Printf("Start error %s",err)

        }


        stdo,g := ioutil.ReadAll(stdout)

        stde,f := ioutil.ReadAll(stderr)


        d := cmd.Wait()


        if d != nil {

                fmt.Println(d)

        }


        if g != nil {

                fmt.Println(g)

        }


        if f !=nil {

                fmt.Println(f)

        }


        fmt.Printf("Standard err is %s \n", stde)

        fmt.Printf("Standard out is %s \n",stdo)

}


查看完整回答
反對 回復(fù) 2021-07-12
  • 1 回答
  • 0 關(guān)注
  • 275 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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