Вы можете использовать стороннюю библиотеку 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 также определяет интерфейсы для некоторых часто используемых команд, а в Rashell_Posix
определен хороший интерфейс для команды find
, что, кстати, гарантирует переносимость POSIX.