Puede usar la biblioteca de terceros Rashell que utiliza Lwt para definir algunas primitivas de alto nivel para leer la salida de los procesos. Estas primitivas, definidos en el módulo Rashell_Command, son:
exec_utility
para leer la salida de un proceso como una cadena;
exec_test
para leer solo el estado de salida de un proceso;
exec_query
para leer la salida de una línea de proceso por la línea como un string Lwt_stream.t
exec_filter
utilizar un programa externo como una transformación string Lwt_stream.t -> string Lwt_stream.t
.
La función command
se utiliza para crear contextos de comando en el que se pueden aplicar las primitivas anteriores, tiene la firma:
val command : ?workdir:string -> ?env:string array -> string * (string array) -> t
(** [command (program, argv)] prepare a command description with the
given [program] and argument vector [argv]. *)
Así, por ejemplo
Rashell_Command.(exec_utility ~chomp:true (command("", [| "uname" |])))
es un string Lwt.t
cuales devuelve la cadena "mordida" (nueva línea eliminada) del comando "uname". Como un segundo ejemplo
Rashell_Command.(exec_query (command("", [| "find"; "/home/user"; "-type"; "f"; "-name"; "*.orig" |])))
es una string Lwt_stream.t
cuyos elementos son los caminos del archivo encontrado por el comando
find /home/user -type f -name '*.orig'
La biblioteca Rashell define también interfaces para algunos comandos usados comúnmente, y una interfaz agradable para el comando find
se define en Rashell_Posix
, que por cierto garantiza la portabilidad de POSIX.
http://caml.inria.fr/pub/docs/manual-ocaml/libref/Unix.html#VALopen_process_in – newacct