如何从进程中获取实时、非阻塞的输出
Posted
技术标签:
【中文标题】如何从进程中获取实时、非阻塞的输出【英文标题】:How to get live, non-blocking output from process 【发布时间】:2019-09-19 07:20:45 【问题描述】:我希望能够捕获我没有源代码的 cli 程序的输出(在它终止之前)。
我发现的所有东西都是用管道完成的,据我所知,它只会在刷新或退出程序时发送输出。 我在 Codeproject 上找到的一种解决方案仅适用于 Windows。
【问题讨论】:
您需要使用伪 tty 来使程序取消缓冲其输出。您可以使用Expect
附带的unbuffer
程序来执行此操作。
所以你可以使用popen("unbuffer cli_program", "r")
这正是我所需要的。谢谢!
【参考方案1】:
您可以使用stdbuf
强制应用程序的stdout
和stderr
进行行缓冲,即使重定向到管道或文件时也是如此:
stdbuf --output=L --error=L <program> | ...
【讨论】:
以上是关于如何从进程中获取实时、非阻塞的输出的主要内容,如果未能解决你的问题,请参考以下文章