为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
凤凰求蛊 2021-11-22 10:20:38
我有这个代码来运行zsh并将其输出记录到输出文件中。package mainimport (    "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会输出foobar而如果我让cmd.Stdout = os.Stdout,它会正确显示为foo    bar是什么导致之间的差异os.Stdout和multiwriter?
查看完整描述

1 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

基于@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

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


查看完整回答
反对 回复 2021-11-22
  • 1 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信