"psql"コマンドでエラーが発生し、stderrを読み込み、Goプログラムで印刷しようとしています。私はstderrとstdoutからデータを読み込むためにioutil.ReadAllを使います。stderrとioutil.ReadAllを使用してこのGoプログラムで "bad file descriptor"を取得するのはなぜですか
残念ながら、stderrからは全く読んでいません。 ioutil.ReadAllはエラーを返します。これは私が期待しているエラーではありません。
私が手にエラーがここ
read |0: bad file descriptor
あるコードです。
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)
}
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)
}
エラーをすぐに処理することは、一般的には良い考えです。あなたの例では、 'ioutil.ReadAll(stdout)'が失敗すると、エラーが処理される前に 'ioutil.ReadAll(stderr)'と 'cmd.Wait()'が呼び出されます。 –
はい、そうです。 – ppone