के बीच अंतर मेरे पास यह कोड zsh
चलाने के लिए है और आउटपुट फ़ाइल में इसका आउटपुट लॉग करें।गोलांग - os.stdout और multwriter
package main
import (
"io"
"os"
"os/exec"
)
func main() {
cmd := exec.Command("zsh")
f, _ := os.Create("log.txt")
multiWriter := io.MultiWriter(os.Stdout, f)
cmd.Stdout = multiWriter
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin
cmd.Run()
}
func haltOnError(err error) {
if err != nil {
panic(err)
}
}
जब कार्यक्रम कार्यान्वित करता है, ls
इच्छा उत्पादन
foo
bar
टाइपिंग अगर मैं cmd.Stdout = os.Stdout
करते हैं, यह
foo bar
के रूप में सही ढंग से प्रदर्शित करता है क्या os.Stdout
और multiwriter
के बीच मतभेद की ओर जाता है?
यह जाना जाता है, वैध व्यवहार। 'Ls' प्रोग्राम डिफ़ॉल्ट आउटपुट प्रारूप चुनने के लिए' isatty' सी फ़ंक्शन का उपयोग करता है। जब आप 'io.MultiWriter' का उपयोग करते हैं, 'isatty' रिटर्न 0 है, इसलिए' ls' का आउटपुट प्रारूप अलग है। –
@TimCooper एक लेखक को एक tty की तरह व्यवहार करने के लिए कोई सीधा तरीका है? मैं थोड़ी सी बात करता हूं और पीटीआई ढूंढता हूं लेकिन वास्तव में यह नहीं जानता कि यह कैसे काम करता है। – boh
@ बोह: आउटपुट क्षमताओं के बावजूद वांछित आउटपुट प्रारूप का उपयोग करने के लिए चीजों को अन्य तरीकों से क्यों न करें और 'एलएस' को मजबूर क्यों न करें? 'Ls -x',' ls-c' या 'ls -1' – wldsvc