stack-1.5.1: The Haskell Tool Stack

Safe HaskellNone
LanguageHaskell2010

System.Process.Read

Description

Reading from external processes.

Synopsis

Documentation

readProcessStdout Source #

Arguments

:: (MonadIO m, MonadLogger m, MonadBaseControl IO m, MonadCatch m) 
=> Maybe (Path Abs Dir)

Optional directory to run in

-> EnvOverride 
-> String

Command

-> [String]

Command line arguments

-> m ByteString 

Produce a strict ByteString from the stdout of a process.

Throws a ReadProcessException exception if the process fails.

readProcessStderrStdout Source #

Arguments

:: (MonadIO m, MonadLogger m, MonadBaseControl IO m) 
=> Maybe (Path Abs Dir)

Optional directory to run in

-> EnvOverride 
-> String

Command

-> [String]

Command line arguments

-> m (ByteString, ByteString) 

Produce strict ByteStrings from the stderr and stdout of a process.

Throws a ReadProcessException exception if the process fails.

tryProcessStdout Source #

Arguments

:: (MonadIO m, MonadLogger m, MonadBaseControl IO m, MonadCatch m) 
=> Maybe (Path Abs Dir)

Optional directory to run in

-> EnvOverride 
-> String

Command

-> [String]

Command line arguments

-> m (Either ReadProcessException ByteString) 

Try to produce a strict ByteString from the stdout of a process.

tryProcessStderrStdout Source #

Arguments

:: (MonadIO m, MonadLogger m, MonadBaseControl IO m, MonadCatch m) 
=> Maybe (Path Abs Dir)

Optional directory to run in

-> EnvOverride 
-> String

Command

-> [String]

Command line arguments

-> m (Either ReadProcessException (ByteString, ByteString)) 

Try to produce strict ByteStrings from the stderr and stdout of a process.

sinkProcessStdout Source #

Arguments

:: (MonadIO m, MonadLogger m, MonadBaseControl IO m, MonadCatch m) 
=> Maybe (Path Abs Dir)

Optional directory to run in

-> EnvOverride 
-> String

Command

-> [String]

Command line arguments

-> Sink ByteString IO a

Sink for stdout

-> m a 

Consume the stdout of a process feeding strict ByteStrings to a consumer. If the process fails, spits out stdout and stderr as error log level. Should not be used for long-running processes or ones with lots of output; for that use sinkProcessStdoutLogStderr.

Throws a ReadProcessException if unsuccessful.

sinkProcessStderrStdout Source #

Arguments

:: (MonadIO m, MonadLogger m) 
=> Maybe (Path Abs Dir)

Optional directory to run in

-> EnvOverride 
-> String

Command

-> [String]

Command line arguments

-> Sink ByteString IO e

Sink for stderr

-> Sink ByteString IO o

Sink for stdout

-> m (e, o) 

Consume the stdout and stderr of a process feeding strict ByteStrings to the consumers.

Throws a ReadProcessException if unsuccessful in launching, or ProcessExitedUnsuccessfully if the process itself fails.

sinkProcessStderrStdoutHandle Source #

Arguments

:: (MonadIO m, MonadLogger m) 
=> Maybe (Path Abs Dir)

Optional directory to run in

-> EnvOverride 
-> String

Command

-> [String]

Command line arguments

-> Handle 
-> Handle 
-> m () 

Like sinkProcessStderrStdout, but receives Handles for stderr and stdout instead of Sinks.

Throws a ReadProcessException if unsuccessful in launching, or ProcessExitedUnsuccessfully if the process itself fails.

readProcess #

Arguments

:: FilePath

Filename of the executable (see RawCommand for details)

-> [String]

any arguments

-> String

standard input

-> IO String

stdout

readProcess forks an external process, reads its standard output strictly, blocking until the process terminates, and returns the output string. The external process inherits the standard error.

If an asynchronous exception is thrown to the thread executing readProcess, the forked process will be terminated and readProcess will wait (block) until the process has been terminated.

Output is returned strictly, so this is not suitable for interactive applications.

This function throws an IOError if the process ExitCode is anything other than ExitSuccess. If instead you want to get the ExitCode then use readProcessWithExitCode.

Users of this function should compile with -threaded if they want other Haskell threads to keep running while waiting on the result of readProcess.

 > readProcess "date" [] []
 "Thu Feb  7 10:03:39 PST 2008\n"

The arguments are:

  • The command to run, which must be in the $PATH, or an absolute or relative path
  • A list of separate command line arguments to the program
  • A string to pass on standard input to the forked process.

data EnvOverride Source #

Override the environment received by a child process.

Constructors

EnvOverride 

Fields

unEnvOverride :: EnvOverride -> Map Text Text Source #

Get the environment variables from an EnvOverride.

modifyEnvOverride :: MonadIO m => EnvOverride -> (Map Text Text -> Map Text Text) -> m EnvOverride Source #

Modify the environment variables of an EnvOverride.

envHelper :: EnvOverride -> Maybe [(String, String)] Source #

Helper conversion function.

doesExecutableExist Source #

Arguments

:: MonadIO m 
=> EnvOverride

How to override environment

-> String

Name of executable

-> m Bool 

Check if the given executable exists on the given PATH.

findExecutable Source #

Arguments

:: (MonadIO m, MonadThrow n) 
=> EnvOverride

How to override environment

-> String

Name of executable

-> m (n (Path Abs File))

Full path to that executable on success

Find the complete path for the executable.

Throws a ReadProcessException if unsuccessful.

getEnvOverride :: MonadIO m => Platform -> m EnvOverride Source #

Load up an EnvOverride from the standard environment.

envSearchPath :: EnvOverride -> [FilePath] Source #

Get the list of directories searched (PATH).

preProcess Source #

Arguments

:: MonadIO m 
=> Maybe (Path Abs Dir)

Optional directory to create if necessary

-> EnvOverride

How to override environment

-> String

Command name

-> m FilePath 

Perform pre-call-process tasks. Ensure the working directory exists and find the executable path.

Throws a ReadProcessException if unsuccessful.

readProcessNull Source #

Arguments

:: (MonadIO m, MonadLogger m, MonadBaseControl IO m, MonadCatch m) 
=> Maybe (Path Abs Dir)

Optional working directory

-> EnvOverride 
-> String

Command

-> [String]

Command line arguments

-> m () 

Read from the process, ignoring any output.

Throws a ReadProcessException exception if the process fails.

augmentPath :: MonadThrow m => [Path Abs Dir] -> Maybe Text -> m Text Source #

Augment the PATH environment variable with the given extra paths.

augmentPathMap :: MonadThrow m => [Path Abs Dir] -> Map Text Text -> m (Map Text Text) Source #

Apply augmentPath on the PATH value in the given Map.

resetExeCache :: MonadIO m => EnvOverride -> m () Source #

Reset the executable cache.