Safe Haskell | Safe |
---|---|
Language | Haskell98 |
A full tutorial for this module is available at: https://github.com/snoyberg/conduit/blob/master/PROCESS.md.
Note that, while the tutorial covers Data.Conduit.Process
, that module closely
follows the present one, and almost all concepts in the tutorial apply here.
Synopsis
- streamingProcess :: (MonadIO m, InputSource stdin, OutputSink stdout, OutputSink stderr) => CreateProcess -> m (stdin, stdout, stderr, StreamingProcessHandle)
- closeStreamingProcessHandle :: MonadIO m => StreamingProcessHandle -> m ()
- data Inherited = Inherited
- data ClosedStream = ClosedStream
- data UseProvidedHandle = UseProvidedHandle
- data StreamingProcessHandle
- waitForStreamingProcess :: MonadIO m => StreamingProcessHandle -> m ExitCode
- waitForStreamingProcessSTM :: StreamingProcessHandle -> STM ExitCode
- getStreamingProcessExitCode :: MonadIO m => StreamingProcessHandle -> m (Maybe ExitCode)
- getStreamingProcessExitCodeSTM :: StreamingProcessHandle -> STM (Maybe ExitCode)
- streamingProcessHandleRaw :: StreamingProcessHandle -> ProcessHandle
- streamingProcessHandleTMVar :: StreamingProcessHandle -> TMVar ExitCode
- class InputSource a
- class OutputSink a
- withCheckedProcess :: (InputSource stdin, OutputSink stderr, OutputSink stdout, MonadIO m) => CreateProcess -> (stdin -> stdout -> stderr -> m b) -> m b
- data ProcessExitedUnsuccessfully = ProcessExitedUnsuccessfully CreateProcess ExitCode
- module System.Process
Functions
streamingProcess :: (MonadIO m, InputSource stdin, OutputSink stdout, OutputSink stderr) => CreateProcess -> m (stdin, stdout, stderr, StreamingProcessHandle) #
The primary function for running a process. Note that, with the
exception of UseProvidedHandle
, the values for std_in
, std_out
and std_err
will be ignored by this function.
Since 0.1.4
closeStreamingProcessHandle :: MonadIO m => StreamingProcessHandle -> m () #
Free any resources (e.g. Handle
s) acquired by a call to streamingProcess
.
Since: 0.1.16
Specialized streaming types
Inherit the stream from the current process.
Since 0.1.4
Instances
OutputSink Inherited # | |
Defined in Data.Streaming.Process | |
InputSource Inherited # | |
Defined in Data.Streaming.Process |
data ClosedStream #
Close the stream with the child process.
Since 0.1.4
Instances
OutputSink ClosedStream # | |
Defined in Data.Streaming.Process osStdStream :: (Maybe Handle -> IO ClosedStream, Maybe StdStream) # | |
InputSource ClosedStream # | |
Defined in Data.Streaming.Process isStdStream :: (Maybe Handle -> IO ClosedStream, Maybe StdStream) # |
data UseProvidedHandle #
Use the Handle
provided by the CreateProcess
value. This would allow
you, for example, to open up a Handle
to a file, set it as std_out
, and
avoid any additional overhead of dealing with providing that data to your
process.
Since 0.1.4
Instances
OutputSink UseProvidedHandle # | |
Defined in Data.Streaming.Process osStdStream :: (Maybe Handle -> IO UseProvidedHandle, Maybe StdStream) # | |
InputSource UseProvidedHandle # | |
Defined in Data.Streaming.Process isStdStream :: (Maybe Handle -> IO UseProvidedHandle, Maybe StdStream) # |
Process handle
data StreamingProcessHandle #
Wraps up the standard ProcessHandle
to avoid the waitForProcess
deadlock. See the linked documentation from the module header for more
information.
Since 0.1.4
waitForStreamingProcess :: MonadIO m => StreamingProcessHandle -> m ExitCode #
Blocking call to wait for a process to exit.
Since 0.1.4
waitForStreamingProcessSTM :: StreamingProcessHandle -> STM ExitCode #
STM version of waitForStreamingProcess
.
Since 0.1.4
getStreamingProcessExitCode :: MonadIO m => StreamingProcessHandle -> m (Maybe ExitCode) #
Non-blocking call to check for a process exit code.
Since 0.1.4
getStreamingProcessExitCodeSTM :: StreamingProcessHandle -> STM (Maybe ExitCode) #
STM version of getStreamingProcessExitCode
.
Since 0.1.4
streamingProcessHandleRaw :: StreamingProcessHandle -> ProcessHandle #
Get the raw ProcessHandle
from a StreamingProcessHandle
. Note that
you should avoid using this to get the process exit code, and instead
use the provided functions.
Since 0.1.4
streamingProcessHandleTMVar :: StreamingProcessHandle -> TMVar ExitCode #
Get the TMVar
storing the process exit code. In general, one of the
above functions should be used instead to avoid accidentally corrupting the variable's state..
Since 0.1.4
Type classes
class InputSource a #
Class for all things which can be used to provide standard input.
Since 0.1.4
Instances
InputSource Handle # | |
Defined in Data.Streaming.Process.Internal | |
InputSource ClosedStream # | |
Defined in Data.Streaming.Process isStdStream :: (Maybe Handle -> IO ClosedStream, Maybe StdStream) # | |
InputSource Inherited # | |
Defined in Data.Streaming.Process | |
InputSource UseProvidedHandle # | |
Defined in Data.Streaming.Process isStdStream :: (Maybe Handle -> IO UseProvidedHandle, Maybe StdStream) # |
class OutputSink a #
Class for all things which can be used to consume standard output or error.
Since 0.1.4
Instances
OutputSink Handle # | |
Defined in Data.Streaming.Process.Internal | |
OutputSink ClosedStream # | |
Defined in Data.Streaming.Process osStdStream :: (Maybe Handle -> IO ClosedStream, Maybe StdStream) # | |
OutputSink Inherited # | |
Defined in Data.Streaming.Process | |
OutputSink UseProvidedHandle # | |
Defined in Data.Streaming.Process osStdStream :: (Maybe Handle -> IO UseProvidedHandle, Maybe StdStream) # |
Checked processes
withCheckedProcess :: (InputSource stdin, OutputSink stderr, OutputSink stdout, MonadIO m) => CreateProcess -> (stdin -> stdout -> stderr -> m b) -> m b #
Run a process and supply its streams to the given callback function. After
the callback completes, wait for the process to complete and check its exit
code. If the exit code is not a success, throw a
ProcessExitedUnsuccessfully
.
NOTE: This function does not kill the child process or ensure
resources are cleaned up in the event of an exception from the
provided function. For that, please use withCheckedProcessCleanup
from the conduit-extra
package.
Since 0.1.7
data ProcessExitedUnsuccessfully #
Indicates that a process exited with an non-success exit code.
Since 0.1.7
Instances
Reexport
module System.Process