2010-02-06 13 views

Antwort

14

Sie möchten Unix.open_process_in, das auf Seite 388 des OCaml-Systemhandbuchs, Version 3.10, beschrieben wird.

+3

http://caml.inria.fr/pub/docs/manual-ocaml/libref/Unix.html#VALopen_process_in – newacct

4
let process_output_to_list2 = fun command -> 
    let chan = Unix.open_process_in command in 
    let res = ref ([] : string list) in 
    let rec process_otl_aux() = 
    let e = input_line chan in 
    res := e::!res; 
    process_otl_aux() in 
    try process_otl_aux() 
    with End_of_file -> 
    let stat = Unix.close_process_in chan in (List.rev !res,stat) 
let cmd_to_list command = 
    let (l,_) = process_output_to_list2 command in l 
2

Sie können die Third-Party-Bibliothek Rashell verwenden, die Lwt verwendet, um einige High-Level-Primitive zu definieren, um Ausgaben von Prozessen zu lesen. Diese Primitiven, definiert in dem Modul Rashell_Command sind:

  • exec_utility die Ausgabe eines Prozesses als Zeichenkette zu lesen;
  • exec_test nur den Exit-Status eines Prozesses zu lesen;
  • exec_query die Ausgabe einer Prozesslinie für Zeile als string Lwt_stream.t
  • exec_filter zum Lesen ein externes Programm als string Lwt_stream.t -> string Lwt_stream.t Transformation zu verwenden. beispielsweise so,

    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" |]))) 
    

    ist ein string Lwt.t, die:

Die command Funktion Befehlskontexte verwendet wird, auf dem die vorherige Primitive angewandt werden, zu erstellen, ist es die Signatur gibt den "chomped" String (neue Zeile entfernt) des Befehls "uname" zurück. Als zweites Beispiel

Rashell_Command.(exec_query (command("", [| "find"; "/home/user"; "-type"; "f"; "-name"; "*.orig" |]))) 

ist ein string Lwt_stream.t dessen Elemente die Pfade der Datei durch den Befehl gefunden

find /home/user -type f -name '*.orig' 

Die Rashell Bibliothek auch auf einige häufig verwendete Befehle Schnittstellen definiert, und eine schöne Schnittstelle zu Der Befehl find ist in Rashell_Posix definiert - was übrigens die Portabilität von POSIX garantiert.

Verwandte Themen