【发布时间】:2015-08-23 21:35:38
【问题描述】:
我正在编写一个服务,该服务必须将已执行命令的输出流式传输到父级和日志。当过程很长时,问题是cmd.StdoutPipe给了我一个最终的(字符串)结果。
是否可以部分输出正在发生的事情,比如在 shell 中
func main() {
cmd := exec.Command("sh", "-c", "some long runnig task")
stdout, _ := cmd.StdoutPipe()
cmd.Start()
scanner := bufio.NewScanner(stdout)
for scanner.Scan() {
m := scanner.Text()
fmt.Println(m)
log.Printf(m)
}
cmd.Wait()
}
附:只是输出将是:
cmd.Stdout = os.Stdout
但就我而言,这还不够。
【问题讨论】:
-
我对语法很感兴趣,这是什么语言?
-
@AliTorabi 这是Go。
-
不是直接答案(即@icza 提到的
\n),但您可能会发现io.MultiWriter很有用,因为您说您需要将输出发送到两个地方。特别是,如果您不需要log包提供的格式,您可以执行以下操作:play.golang.org/p/4PG3qbiQx9