gpt4 book ai didi

go - 如何将标准输出从 os.Exec 传输到文件和终端?

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

如何将 os.Exec 的标准输出通过管道传输到文件以及终端?

我试过这个:

go func() {
scanner := bufio.NewScanner(stdout)
writer := bufio.NewWriter(logFile)
for scanner.Scan() {
log.Debugln(scanner.Text())
writer.WriteString(scanner.Text())
}
writer.Flush()
}()

但是 writer.WriteString(scanner.Text()) 在文件中丢失了 \n。如何让他们回来?也许有一些更优雅的管道解决方案?

最佳答案

创建一个 io.MultiWriter带有参数 os.Stdout 和文件。设置Cmd.Stdout到多写器。运行命令。

 cmd := exec.Command(name, args...)
cmd.Stdout = io.MultiWriter(os.Stdout, file)
err := cmd.Run()

如果要逐行写入log.Debugf等文件,则执行以下操作:

go func() {
scanner := bufio.NewScanner(stdout)
writer := bufio.NewWriter(io.MultiWriter(os.Stdout, file))
for scanner.Scan() {
log.Debugln(scanner.Text())
writer.Write(scanner.Bytes())
writer.WriteByte('\n') // add line separator
}
writer.Flush()
}()

此代码假定输入中的行分隔符是\n。

关于go - 如何将标准输出从 os.Exec 传输到文件和终端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48326997/

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