कमांड "psql" को एक त्रुटि फेंकनी चाहिए, और मैं stderr को पढ़ने और इसे गो प्रोग्राम में प्रिंट करने की कोशिश कर रहा हूं। मैं stoutr, और stdout से डेटा पढ़ने के लिए ioutil.ReadAll का उपयोग करें।मुझे stderr और ioutil का उपयोग करके इस गो प्रोग्राम में "खराब फ़ाइल डिस्क्रिप्टर" क्यों मिलता है। रीडअल
दुर्भाग्यवश यह 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