module Database.PostgreSQL.Embedded.Exec ( systemSilent , rawSystemSilent ) where import GHC.IO.Exception (IOErrorType (..), ioException) import System.Exit import System.IO import System.IO.Error import System.Process {-| Exactly like 'System.Process.system' but does not capture stdout nor stderr. -} systemSilent :: String -> IO ExitCode systemSilent "" = ioException (ioeSetErrorString (mkIOError InvalidArgument "system" Nothing Nothing) "null command") systemSilent str = do devNull <- openFile "/dev/null" WriteMode (_, _, _, p) <- createProcess (shell str) { delegate_ctlc = True , std_err = UseHandle devNull , std_out = UseHandle devNull } waitForProcess p {-| Exactly like 'System.Process.rawSystem' but does not capture stdout nor stderr. -} rawSystemSilent :: String -> [String] -> IO ExitCode rawSystemSilent cmd args = do devNull <- nullDevice (_, _, _, p) <- createProcess (proc cmd args) { delegate_ctlc = True , std_err = UseHandle devNull , std_out = UseHandle devNull } waitForProcess p nullDevice :: IO Handle nullDevice = do h <- tryIOError nix either (const windows) return h where nix = openFile "/dev/null" WriteMode windows = openFile "nul" WriteMode