Copyright | (c) Daan Leijen 2003 |
---|---|
License | wxWindows |
Maintainer | wxhaskell-devel@lists.sourceforge.net |
Stability | provisional |
Portability | portable |
Safe Haskell | None |
Language | Haskell98 |
Process and stream wrappers.
- type OnReceive = String -> StreamStatus -> IO ()
- type OnEndProcess = Int -> IO ()
- processExecAsyncTimed :: Window a -> String -> Bool -> OnEndProcess -> OnReceive -> OnReceive -> IO (String -> IO StreamStatus, Process (), Int)
- processExecAsync :: Window a -> String -> Int -> OnEndProcess -> OnReceive -> OnReceive -> IO (String -> IO (), Process (), Int)
- data StreamStatus
- streamBaseStatus :: StreamBase a -> IO StreamStatus
- inputStreamGetContents :: InputStream a -> IO String
- inputStreamGetContentsN :: InputStream a -> Int -> IO String
- inputStreamGetLine :: InputStream a -> Int -> IO String
- inputStreamGetString :: InputStream a -> Int -> IO String
- inputStreamGetChar :: InputStream a -> IO Char
- outputStreamPutString :: OutputStream a -> String -> IO ()
- inputStreamGetLineNoWait :: InputStream a -> Int -> IO String
- inputStreamGetStringNoWait :: InputStream a -> Int -> IO String
- inputStreamGetCharNoWait :: InputStream a -> IO (Maybe Char)
- outputStreamPutStringNoWait :: OutputStream a -> String -> IO Int
Process
type OnReceive = String -> StreamStatus -> IO () Source
Type of input receiver function.
type OnEndProcess = Int -> IO () Source
Type of end-of-process event handler. Gets the exitcode as its argument.
processExecAsyncTimed :: Window a -> String -> Bool -> OnEndProcess -> OnReceive -> OnReceive -> IO (String -> IO StreamStatus, Process (), Int) Source
(processExecAsyncTimer command processOutputOnEnd onEndProcess onOutput onErrorOutput parent
) starts
the command
asynchronously. The handler onEndProcess
is called when the process
terminates. onOutput
receives the output from stdout
, while onErrorOutput
receives
output from stderr
. If processOutputOnEnd
is True
, the remaining output of a terminated
process is processed (calling onOutput
). The call returns a triple (send,process,pid
):
The send
function is used to send input to the stdin
pipe of the process. The
process object is returned in process
and the process identifier in pid
.
Note: The method uses idle event timers to process the output channels. On
many platforms this is much more trustworthy and robust than the processExecAsync
that
uses threads (which can cause all kinds of portability problems).
processExecAsync :: Window a -> String -> Int -> OnEndProcess -> OnReceive -> OnReceive -> IO (String -> IO (), Process (), Int) Source
Deprecated: Use processExecAsyncTimed instead (if possible)
deprecated: use processExecAsyncTimed
instead (if possible).
(processExecAsync command bufferSize onEndProcess onOutput onErrorOutput parent
) starts
the command
asynchronously. The handler onEndProcess
is called when the process
terminates. onOutput
receives the output from stdout
, while onErrorOutput
receives
output from stderr
. The bufferSize
determines the intermediate buffer used to
cache the output from those channels. The calls returns a triple (send,process,pid
):
The send
function is used to send input to the stdin
pipe of the process. The
process object is returned in process
and the process identifier in pid
.
Streams
data StreamStatus Source
The status of a stream (see StreamBase
)
StreamOk | No error. |
StreamEof | No more input. |
StreamReadError | Read error. |
StreamWriteError | Write error. |
streamBaseStatus :: StreamBase a -> IO StreamStatus Source
Return the status of the stream
Blocking IO
inputStreamGetContents :: InputStream a -> IO String Source
Get the entire contents of an input stream. The content
is returned as a lazy stream (like hGetContents
).
inputStreamGetContentsN :: InputStream a -> Int -> IO String Source
Get the entire contents of an input stream. The content
is returned as a lazy stream (like hGetContents
). The
contents are returned in lazy batches, whose size is
determined by the first parameter.
inputStreamGetLine :: InputStream a -> Int -> IO String Source
inputStreamGetLine s n
reads a line of at most n
characters from the
input stream (potentially waiting for input). The function does automatic end-of-line
conversion. If the line ends with \n
, an entire line
has been read, otherwise, either the maximum has been reached, or no more
input was available.
inputStreamGetString :: InputStream a -> Int -> IO String Source
The expression (inputStreamGetString n input
) reads a string of maximally
n
characters from input
.
inputStreamGetChar :: InputStream a -> IO Char Source
Read a single character from the input. (equals inputStreamGetC
)
outputStreamPutString :: OutputStream a -> String -> IO () Source
Write a string to an output stream, potentially blocking until all output has been written.
Non-blocking IO
inputStreamGetLineNoWait :: InputStream a -> Int -> IO String Source
inputStreamGetLineNoWait stream n
reads a line of at most n
characters from the
input stream in a non-blocking way. The function does automatic end-of-line
conversion. If the line ends with \n
, an entire line
has been read, otherwise, either the maximum has been reached, or no more
input was available.
inputStreamGetStringNoWait :: InputStream a -> Int -> IO String Source
inputStreamGetStringNoWait stream n
reads a line of at most n
characters from the
input stream in a non-blocking way.
inputStreamGetCharNoWait :: InputStream a -> IO (Maybe Char) Source
Read a single character from the input, returning Nothing
if no input
was available (using inputStreamCanRead
).
outputStreamPutStringNoWait :: OutputStream a -> String -> IO Int Source
Write a string to an output stream, returning the number of bytes actually written.