Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何grep使用RunLoop的macOS控制台应用程序的标准输出_Swift_Macos_Grep_Console Application_Nsrunloop - Fatal编程技术网

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

Swift 如何grep使用RunLoop的macOS控制台应用程序的标准输出,swift,macos,grep,console-application,nsrunloop,Swift,Macos,Grep,Console Application,Nsrunloop,下面是macOS控制台应用程序的简单Swift代码: import Foundation print("hello world") RunLoop.main.run() 在我的真实代码中,我使用RunLoop来避免离开控制台应用程序,因为我会对一些核心蓝牙事件做出反应,并有一个无限循环的东西要显示。我只想使用Ctrl+C退出应用程序 但是,当使用RunLoop.main.run()时,我无法再在终端中对输出进行grep: $ ./app hello world ^C $ ./app | gr

下面是macOS控制台应用程序的简单Swift代码:

import Foundation

print("hello world")
RunLoop.main.run()
在我的真实代码中,我使用
RunLoop
来避免离开控制台应用程序,因为我会对一些核心蓝牙事件做出反应,并有一个无限循环的东西要显示。我只想使用Ctrl+C退出应用程序

但是,当使用
RunLoop.main.run()
时,我无法再在终端中对输出进行grep:

$ ./app
hello world
^C
$ ./app | grep hello
^C
关于如何提高输出的一些想法?
我想使用
RunLoop
是个坏主意,但是如果没有一种活动等待或手动管理一些执行线程,还有什么替代方法呢?

您可以尝试刷新stdout:

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


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

可能是它工作正常,但输出需要调用flush吗?我不太清楚,因为有一个屏幕输出,但是我添加了一个
fflush(stdout)
行,它工作得更好。如果你把你的建议改写成一个答案而不是一个评论,我至少可以投赞成票。
setbuf(__stdoutp, nil)