如何grep使用RunLoop的macOS控制台应用程序的标准输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何grep使用RunLoop的macOS控制台应用程序的标准输出相关的知识,希望对你有一定的参考价值。

这是一个用于macOS控制台应用程序的简单Swift代码:

import Foundation

print("hello world")
RunLoop.main.run()

在我的真实代码中,我使用RunLoop来避免离开控制台应用程序,因为我对一些CoreBluetooth事件做出反应并且有一个我想要显示的无限循环。我只想使用Ctrl + C退出应用程序。

但是,当使用RunLoop.main.run()时,我不能再在我的终端中输出输出:

$ ./app
hello world
^C
$ ./app | grep hello
^C

关于如何grep输出的一些想法?我想RunLoop的使用是一个坏主意,但是如果没有一种主动等待或手动管理某些执行线程,可以选择什么呢?

答案

您可以尝试刷新标准输出:

fflush(__stdoutp)

或者将stdout上的缓冲区大小设置为零(使其快速,但使用更多资源):

setbuf(__stdoutp, nil)

Swift: how to flush stdout after println?

这通常是解决方案,当您看到输出到终端时,但是一旦将流程传输到另一个流程(如grep),就没有输出。管道影响缓冲的默认选择。希望这可以帮助!

以上是关于如何grep使用RunLoop的macOS控制台应用程序的标准输出的主要内容,如果未能解决你的问题,请参考以下文章

iOS 利用runloop阻塞主线程

RunLoop

RunLoop的学习总结

RunLoop的学习总结

RunLoop的学习总结

macos如何看睡眠日志