È possibile utilizzare la libreria di terze parti Rashell che utilizza Lwt per definire alcune primitive di alto livello per leggere l'output dai processi. Queste primitive, definite nel modulo Rashell_Command, sono:
exec_utility
per leggere l'output di un processo come una stringa;
exec_test
per leggere solo lo stato di uscita di un processo;
exec_query
per leggere l'uscita di una linea di processo per riga come string Lwt_stream.t
exec_filter
utilizzare un programma esterno come trasformazione string Lwt_stream.t -> string Lwt_stream.t
.
La funzione command
viene utilizzata per creare contesti di comando su cui possono essere applicati i primitivi precedenti, ha 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]. *)
Così, per esempio
Rashell_Command.(exec_utility ~chomp:true (command("", [| "uname" |])))
è un string Lwt.t
che restituisce la stringa "Chomped" (nuova riga rimossa) del comando "uname". Come secondo esempio
Rashell_Command.(exec_query (command("", [| "find"; "/home/user"; "-type"; "f"; "-name"; "*.orig" |])))
è un string Lwt_stream.t
cui elementi sono i percorsi del file trovato dal comando
find /home/user -type f -name '*.orig'
La libreria Rashell definisce anche interfacce per alcuni comandi di uso comune, e una bella interfaccia per il comando find
è definito in Rashell_Posix
- che, a proposito, garantisce la portabilità POSIX.
fonte
2016-01-31 17:37:59
http://caml.inria.fr/pub/docs/manual-ocaml/libref/Unix.html#VALopen_process_in – newacct