envstatus-1.0.0: src/EnvStatus/Process.hs
module EnvStatus.Process (
readProcessWithIgnoreExitCode
, runCommandAsync
) where
import Control.Concurrent (forkIO)
import Control.Concurrent.MVar (newEmptyMVar, takeMVar, putMVar)
import System.Process (readProcessWithExitCode)
import System.Exit (ExitCode(ExitSuccess))
import EnvStatus.Output.Parse (parseCommand)
readProcessWithIgnoreExitCode :: FilePath -> [String] -> String -> IO String
readProcessWithIgnoreExitCode command options stdin = do
(exCode, stdout, _) <- readProcessWithExitCode command options stdin
if exCode == ExitSuccess
then return stdout
else return ""
runCommandAsync :: String -> IO String
runCommandAsync cmd = do
let components = parseCommand cmd
mvCmd <- newEmptyMVar
result <- readProcessWithIgnoreExitCode (head components) (tail components) ""
_ <- forkIO $ putMVar mvCmd result
takeMVar mvCmd