如何解决执行命令等待它完成,在Go中发送实时输出
我有一个永远循环的二进制文件,每毫秒返回一个输出(吓死了,我知道)。我想通过Go调用它。问题是,(据我所知),Go在显示输出之前将等待命令完成。就我而言,命令在被杀死之前不会完成(我也想通过停止Go程序来停止二进制文件)。这是我所拥有的:
func main(){
loggerInit := exec.Command("/logger")
var out Bytes.Buffer
loggerInit.Stdout = &out
err = loggerInit.Run()
if err != nil {
fmt.Println(err)
}
fmt.Printf(out.String())
}
但这不会产生任何输出,并且会一直保留在命令中(实际上,手动运行/logger
确实会提供所需的输出)。谢谢,加油!
解决方法
您正在使用Run
:
运行会启动指定的命令,并等待其完成。
根据您的描述,您应该在哪里使用Start
:
启动将启动指定的命令,但不等待其完成。
但是,当然,您需要调整代码以等待或循环等,否则您的应用程序将在第一次读取任何输出后立即退出。
,我认为您可以使用此命令通过Go传递记录器的输出
./logger | main.go
这意味着,记录器产生了一些东西(例如,字节/字符串),然后Go将该输出读取为输入。
main.go
buf := make([]byte,expectedBytes)
for {
bytes,_ := io.ReadFull(os.Stdin,buf)
// do it here
time.Sleep(1 * time.Second)
}
对不起,我的英语希望对您有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。