Warning: Reason support is experimental. We are looking for beta-tester and contributors.

Module Lwt_process

module Lwt_process : sig..end

Process management



This modules allow you to spawn processes and communicate with them.

type command = string * string array

A command is a program name with a list of arguments

val shell : string -> command

A command executed with "/bin/sh"


All the following functions take an optionnal argument timeout. If specified, after expiration, the process will be sent a Unix.sigkill signal and channels will be closed.

High-level functions



Redirections


type redirection = 
  [ `Close
  | `Dev_null
  | `FD_copy of Unix.file_descr
  | `FD_move of Unix.file_descr
  | `Keep ]

A file descriptor redirection. It describe how standard file descriptors are redirected in the child process.


Note: all optionnal redirection argumetns default to `Keep

Executing


val exec : 
  ?timeout:float ->
  ?env:string array ->
  ?stdin:redirection ->
  ?stdout:redirection ->
  ?stderr:redirection ->
  command -> Unix.process_status Lwt.t

Executes the given command and returns its exit status.


Receiving


val pread : 
  ?timeout:float ->
  ?env:string array ->
  ?stdin:redirection ->
  ?stderr:redirection -> command -> string Lwt.t
val pread_chars : 
  ?timeout:float ->
  ?env:string array ->
  ?stdin:redirection ->
  ?stderr:redirection ->
  command -> char Lwt_stream.t
val pread_line : 
  ?timeout:float ->
  ?env:string array ->
  ?stdin:redirection ->
  ?stderr:redirection -> command -> string Lwt.t
val pread_lines : 
  ?timeout:float ->
  ?env:string array ->
  ?stdin:redirection ->
  ?stderr:redirection ->
  command -> string Lwt_stream.t


Sending


val pwrite : 
  ?timeout:float ->
  ?env:string array ->
  ?stdout:redirection ->
  ?stderr:redirection ->
  command -> string -> unit Lwt.t
val pwrite_chars : 
  ?timeout:float ->
  ?env:string array ->
  ?stdout:redirection ->
  ?stderr:redirection ->
  command -> char Lwt_stream.t -> unit Lwt.t
val pwrite_line : 
  ?timeout:float ->
  ?env:string array ->
  ?stdout:redirection ->
  ?stderr:redirection ->
  command -> string -> unit Lwt.t
val pwrite_lines : 
  ?timeout:float ->
  ?env:string array ->
  ?stdout:redirection ->
  ?stderr:redirection ->
  command -> string Lwt_stream.t -> unit Lwt.t


Mapping


val pmap : 
  ?timeout:float ->
  ?env:string array ->
  ?stderr:redirection ->
  command -> string -> string Lwt.t
val pmap_chars : 
  ?timeout:float ->
  ?env:string array ->
  ?stderr:redirection ->
  command -> char Lwt_stream.t -> char Lwt_stream.t
val pmap_line : 
  ?timeout:float ->
  ?env:string array ->
  ?stderr:redirection ->
  command -> string -> string Lwt.t
val pmap_lines : 
  ?timeout:float ->
  ?env:string array ->
  ?stderr:redirection ->
  command -> string Lwt_stream.t -> string Lwt_stream.t


Spawning processes


type state =  | Running(* The process is still running *) | Exited of Unix.process_status(* The process has exited *)

State of a sub-process

class process_none : 
?timeout:float -> ?env:string array -> ?stdin:redirection ->
?stdout:redirection -> ?stderr:redirection ->
command ->
object..end

Pid of the sub-process

val open_process_none : 
  ?timeout:float ->
  ?env:string array ->
  ?stdin:redirection ->
  ?stdout:redirection ->
  ?stderr:redirection ->
  command -> process_none
val with_process_none : 
  ?timeout:float ->
  ?env:string array ->
  ?stdin:redirection ->
  ?stdout:redirection ->
  ?stderr:redirection ->
  command ->
  (process_none -> 'a Lwt.t) -> 'a Lwt.t
class process_in : 
?timeout:float -> ?env:string array -> ?stdin:redirection ->
?stderr:redirection -> command ->
object..end
val open_process_in : 
  ?timeout:float ->
  ?env:string array ->
  ?stdin:redirection ->
  ?stderr:redirection ->
  command -> process_in
val with_process_in : 
  ?timeout:float ->
  ?env:string array ->
  ?stdin:redirection ->
  ?stderr:redirection ->
  command ->
  (process_in -> 'a Lwt.t) -> 'a Lwt.t
class process_out : 
?timeout:float -> ?env:string array -> ?stdout:redirection ->
?stderr:redirection -> command ->
object..end
val open_process_out : 
  ?timeout:float ->
  ?env:string array ->
  ?stdout:redirection ->
  ?stderr:redirection ->
  command -> process_out
val with_process_out : 
  ?timeout:float ->
  ?env:string array ->
  ?stdout:redirection ->
  ?stderr:redirection ->
  command ->
  (process_out -> 'a Lwt.t) -> 'a Lwt.t
class process : 
?timeout:float -> ?env:string array -> ?stderr:redirection ->
command ->
object..end
val open_process : 
  ?timeout:float ->
  ?env:string array ->
  ?stderr:redirection ->
  command -> process
val with_process : 
  ?timeout:float ->
  ?env:string array ->
  ?stderr:redirection ->
  command -> (process -> 'a Lwt.t) -> 'a Lwt.t
class process_full : 
?timeout:float -> ?env:string array -> command ->
object..end
val open_process_full : 
  ?timeout:float ->
  ?env:string array -> command -> process_full
val with_process_full : 
  ?timeout:float ->
  ?env:string array ->
  command ->
  (process_full -> 'a Lwt.t) -> 'a Lwt.t