我有这个代码来运行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
(将答案记录为在未回答列表中显示安静高)
- 1 回答
- 0 关注
- 113 浏览
添加回答
举报
0/150
提交
取消