重定向标准错误流,haskell创建进程

时间:2017-01-07 21:40:22

标签: haskell

如何在haskell重定向stderr中将createProcess用于/dev/null

2 个答案:

答案 0 :(得分:1)

不是您正在寻找的确切解决方案,但社区中一个流行的解决方案是使用silently包来实现它。

您可以使用hSilence功能来实现您想要的功能。实际上,它在内部打开/dev/null并完成所有工作。示例代码演示:

#!/usr/bin/env stack
{- stack
     --resolver lts-6.15
     --install-ghc
     runghc
     --package process
     --package silently
 -}

import System.Process
import System.IO
import System.IO.Silently

writeToStderr :: IO ()
writeToStderr = do
  hPutStrLn stderr "hello"
  hPutStrLn stderr "world"

main :: IO ()
main = hSilence [stderr] writeToStderr

答案 1 :(得分:1)

使用/dev/null打开withFile并在std_err记录中将其设为CreateProcess

import System.Process
import System.IO 

main :: IO ()
main = withFile "/dev/null" WriteMode (\handle -> do
    (_,_,_,phandle) <- createProcess (shell "echo foo"){ std_err = UseHandle handle}
    waitForProcess phandle
    return ())

在Windows中,您可以使用NUL文件。