Karya, built on 2020-11-26T21:03:17 (patch 23b5be2d53a9e8e7d6136cda5aae2849abe5cded)
Safe HaskellNone

Util.Process

Description

Utilities to deal with processes.

Synopsis

Documentation

supervised :: Process.CreateProcess -> IO.IO () Source #

Start a subprocess, wait for it to complete, and kill it if this thread is killed. This is like Async.withAsync, except for a subprocess, and it's hardcoded to wait for the subprocess.

TODO use Process.withCreateProcess? TODO I think multipleOutput makes this obsolete.

waitAndLog :: Process.CreateProcess -> Maybe Process.ProcessHandle -> IO.IO () Source #

Wait for the process (if it started) and log if it didn't exit successfully.

call :: IO.FilePath -> [String.String] -> IO.IO () Source #

Like Process.callProcess, but log if the binary wasn't found or failed.

create :: Process.CreateProcess -> IO.IO (Maybe Handle, Maybe Handle, Maybe Handle, Maybe Process.ProcessHandle) Source #

Like Process.createProcess, but return a Nothing instead of a pid if the binary doesn't exist.

conversation

data TalkOut Source #

Constructors

Stdout !Text 
Stderr !Text 
Exit !Exit

This always terminates the conversation, and effectively marks the channel closed.

Instances

Instances details
Eq TalkOut # 
Instance details

Defined in Util.Process

Methods

(==) :: TalkOut -> TalkOut -> Bool #

(/=) :: TalkOut -> TalkOut -> Bool #

Ord TalkOut # 
Instance details

Defined in Util.Process

Show TalkOut # 
Instance details

Defined in Util.Process

data TalkIn Source #

Constructors

Text !Text 
EOF 

Instances

Instances details
Eq TalkIn # 
Instance details

Defined in Util.Process

Methods

(==) :: TalkIn -> TalkIn -> Bool #

(/=) :: TalkIn -> TalkIn -> Bool #

Show TalkIn # 
Instance details

Defined in Util.Process

String.IsString TalkIn # 
Instance details

Defined in Util.Process

data Exit Source #

Instances

Instances details
Eq Exit # 
Instance details

Defined in Util.Process

Methods

(==) :: Exit -> Exit -> Bool #

(/=) :: Exit -> Exit -> Bool #

Ord Exit # 
Instance details

Defined in Util.Process

Methods

compare :: Exit -> Exit -> Ordering #

(<) :: Exit -> Exit -> Bool #

(<=) :: Exit -> Exit -> Bool #

(>) :: Exit -> Exit -> Bool #

(>=) :: Exit -> Exit -> Bool #

max :: Exit -> Exit -> Exit #

min :: Exit -> Exit -> Exit #

Show Exit # 
Instance details

Defined in Util.Process

conversation :: IO.FilePath -> [String.String] -> Maybe [(String.String, String.String)] -> Chan.Chan TalkIn -> (Chan.Chan TalkOut -> IO.IO a) -> IO.IO a Source #

Have a conversation with a subprocess. This doesn't use ptys, so this will only work if the subprocess explicitly doesn't use block buffering.

multipleOutput :: [(IO.FilePath, [String.String])] -> (Chan.Chan ((IO.FilePath, [String.String]), TalkOut) -> IO.IO a) -> IO.IO a Source #

Get output from multiple subprocesses. They'll be killed when the action returns, if they haven't already exited.

util