我有这个代码运行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)
}
}
Run Code Online (Sandbox Code Playgroud)
当程序执行时,ls输出将输出
foo
bar
Run Code Online (Sandbox Code Playgroud)
如果我放cmd.Stdout = os.Stdout,它会正确显示为
foo bar
Run Code Online (Sandbox Code Playgroud)
是什么导致os.Stdout和之间的差异multiwriter?
基于@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
Run Code Online (Sandbox Code Playgroud)
(将答案记录为在未答复列表中显示安静的高位)
| 归档时间: |
|
| 查看次数: |
1140 次 |
| 最近记录: |