如何在haskell重定向stderr中将createProcess
用于/dev/null
?
答案 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
文件。