【发布时间】:2017-04-26 13:26:53
【问题描述】:
伙计们,我正在尝试从命令输出中选择新行,但我总是以同步方式完成(我必须等到脚本完成)。我厌倦了使用 fsnotify 但它仅适用于常规文件,您知道如何完成吗?
package main
import (
"fmt"
"os/exec"
"bytes"
"os"
)
func main() {
cmd := exec.Command("scripts/long_script")
output := new(bytes.Buffer)
cmd.Stdout = output
cmd.Stderr = output
if err := cmd.Start(); err != nil{ // after Start program is continued and script is executing in background
fmt.Printf("Failed to start " + err.Error())
os.Exit(1)
}
fmt.Printf(" Before WAIT %s \n", output.String()) // script is writing but nothing can be read from output
cmd.Wait()
fmt.Printf(" After Wait %s \n", output.String()) // if we wait to finish execution, we can read all output
}
【问题讨论】:
-
您可以使用
cmd.StdoutPipe和cmd.StderrPipe通过管道获取命令输出,您可以在数据进入时读取它们。如果您想同时读取它们,您需要设置启动 goroutines。