代码之家  ›  专栏  ›  技术社区  ›  Vincent Hiribarren

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

  •  0
  • Vincent Hiribarren  · 技术社区  · 6 年前

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

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

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

    但是,在使用 RunLoop.main.run()

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

    关于如何将输出grep的一些想法? 我猜 运行回路 这是一个坏主意,但是如果没有一种活动等待或手动管理一些执行线程,还有什么替代方法呢?

    1 回复  |  直到 6 年前
        1
  •  2
  •   wessel    6 年前

    fflush(__stdoutp)
    

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

    setbuf(__stdoutp, nil)
    

    看到了吗 Swift: how to flush stdout after println?

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