Bạn có thể sử dụng thư viện của bên thứ ba Rashell sử dụng Lwt để xác định một số nguyên thủy cấp cao để đọc đầu ra từ các quy trình. Những nguyên thủy này, được định nghĩa trong mô-đun Rashell_Command, là:
exec_utility
để đọc đầu ra của quy trình dưới dạng chuỗi;
exec_test
để chỉ đọc trạng thái thoát của quy trình;
exec_query
để đọc các sản phẩm của một dây chuyền chế biến bởi dòng như một string Lwt_stream.t
exec_filter
sử dụng một chương trình bên ngoài như một sự chuyển đổi string Lwt_stream.t -> string Lwt_stream.t
.
Chức năng command
được sử dụng để tạo ra bối cảnh lệnh mà trên đó các nguyên thủy trước có thể được áp dụng, nó có chữ ký:
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]. *)
Vì vậy, ví dụ
Rashell_Command.(exec_utility ~chomp:true (command("", [| "uname" |])))
là một string Lwt.t
mà trả về chuỗi “chomped” (dòng mới đã bị loại bỏ) của lệnh “uname”. Như một ví dụ thứ hai
Rashell_Command.(exec_query (command("", [| "find"; "/home/user"; "-type"; "f"; "-name"; "*.orig" |])))
là một string Lwt_stream.t
mà yếu tố này là các đường dẫn của tập tin được tìm thấy bởi các lệnh
find /home/user -type f -name '*.orig'
Thư viện Rashell cũng định nghĩa giao diện cho một số lệnh thường được sử dụng, và một giao diện đẹp để lệnh find
được xác định trong Rashell_Posix
- bằng cách này đảm bảo tính di động của POSIX.
Nguồn
2016-01-31 17:37:59
http://caml.inria.fr/pub/docs/manual-ocaml/libref/Unix.html#VALopen_process_in – newacct