gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:15:23 24 4
gpt4 key购买 nike

我有这段代码可以运行 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.Stdoutmultiwriter 之间的差异?

最佳答案

基于@Time 和@wldsvc 的评论

问题的原因是isattyls用来选择默认的输出格式,在本例中使用了io.MultiWriteros.Stdout 根据 isatty 的结果做出不同的决定。

建议的解决方案是使用参数 (man ls) 强制 ls 的输出格式:

-C  list by columns
-x list by lines instead of columns
-1 list one file per line

(将答案记录为在未回答列表中显示安静的高位)

关于golang - os.stdout 和 multiwriter 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33452726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com