golang - os.stdout 和 multiwriter 之间的区别

我有这个代码来运行zsh并将其输出记录到输出文件中。


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?


凤凰求蛊
浏览 114回答 1
1回答

慕田峪7331174

基于@Time 和@wldsvc 的评论问题的原因isatty是 用于ls选择默认输出格式,在这种情况下,使用io.MultiWriter和os.Stdout导致根据 的结果做出不同的决定isatty。建议的解决方案是ls使用参数 ( man ls )强制输出格式:-C  list by columns-x  list by lines instead of columns-1  list one file per line(将答案记录为在未回答列表中显示安静高)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go