Вы можете использовать стороннюю библиотеку Rashell, которая использует Lwt для определения некоторых примитивов высокого уровня для чтения результатов процессов. Эти примитивы, определенные в модуле Rashell_Command, являются:
exec_utility
для чтения выходных данных процесса в виде строки;
exec_test
только для чтения статуса выхода процесса;
exec_query
прочитать вывод технологической линии по линии как string Lwt_stream.t
exec_filter
использовать внешнюю программу как string Lwt_stream.t -> string Lwt_stream.t
трансформации.
command
функция используется для создания командных контекстов, на которых могут быть применены предыдущие примитивы, он имеет подпись:
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]. *)
Так, например
Rashell_Command.(exec_utility ~chomp:true (command("", [| "uname" |])))
является string Lwt.t
, который возвращает строку «chomped» (новая строка удалена) команды «uname». В качестве второго примера
Rashell_Command.(exec_query (command("", [| "find"; "/home/user"; "-type"; "f"; "-name"; "*.orig" |])))
является string Lwt_stream.t
, элементы которой являются путями файла, найденных по команде
find /home/user -type f -name '*.orig'
Библиотека Rashell определяет также взаимодействует с некоторыми часто используемыми командами, и хороший интерфейс команда find
определена в Rashell_Posix
- что, кстати, гарантирует мобильность POSIX.
http://caml.inria.fr/pub/docs/manual-ocaml/libref/Unix.html#VALopen_process_in – newacct