summaryrefslogtreecommitdiff
path: root/src/compiler/GF/System/Process.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/GF/System/Process.hs')
-rw-r--r--src/compiler/GF/System/Process.hs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/compiler/GF/System/Process.hs b/src/compiler/GF/System/Process.hs
new file mode 100644
index 000000000..415f8a50a
--- /dev/null
+++ b/src/compiler/GF/System/Process.hs
@@ -0,0 +1,18 @@
+module GF.System.Process where
+import System.Process
+import System.IO(hGetContents,hClose,hPutStr)
+import Control.Concurrent(forkIO)
+import GF.System.Catch(try)
+
+-- | Feed some input to a shell process and read the output lazily
+readShellProcess :: String -- ^ shell command
+ -> String -- ^ input to shell command
+ -> IO String -- ^ output from shell command
+readShellProcess cmd input =
+ do (Just stdin,Just stdout,Nothing,ph) <-
+ createProcess (shell cmd){std_in=CreatePipe,std_out=CreatePipe}
+ forkIO $ do try $ hPutStr stdin input
+ try $ hClose stdin
+ waitForProcess ph
+ return ()
+ hGetContents stdout