我遇到一个非常奇怪的问题,当通过Kubernetes运行时,我似乎没有从Haskell应用程序中获得任何stdout / stderr输出。
我正在使用非常基本的putStrLn
写入标准输出。
如果我在Kubernetes环境中手动输入容器并通过shell运行应用程序-我会看到预期的输出。
可能是此问题的原因/
LineBuffering
来固定:import System.IO
...
hSetBuffering stdout LineBuffering
hSetBuffering stderr LineBuffering
http://hackage.haskell.org/package/base-4.12.0.0/docs/System-IO.html#t:BufferMode
打开句柄时的默认缓冲模式是与实现有关的,可能取决于文件系统对象附在该手柄上。对于大多数实施,物理文件通常将被块缓冲,而终端通常将被行缓冲的。
感谢fp懈怠的Jesse Kempf,向我指出了这一点!