在OCaml中,如何从子进程获取stdout字符串?

时间:2015-04-08 00:43:33

标签: subprocess ocaml stdout

我正在与OCaml合作,需要启动一个新流程并与之沟通。

  1. 如果子进程在被调用后终止并产生了一些输出,那么如何检索它的stdout中的字符串?

  2. 如果子进程永远不会终止怎么办?也就是说,每次给stdin输入一个字符串,它会产生stdout的结果,如何获取结果?

1 个答案:

答案 0 :(得分:0)

使用Unix.open_process_in功能。它将生成一个进程并返回一个输入通道,允许您从进程中读取数据。

如果你想等待进程终止,你可以只读取所有数据(即等到进程管道返回EOF),然后关闭通道,例如,

(* [run cmd] runs a shell command, waits until it terminates, and  
   returns a list of strings that the process outputed *)
let run cmd =
  let inp = Unix.open_process_in cmd in
  let r = In_channel.input_lines inp in
  In_channel.close inp; r

使用非终止过程更加容易。

您可能还会发现有趣的lwt库,它具有非常下降的多处理接口。异步库是另一个异步库,为多处理提供了出色的接口。虽然这个库很棒,但它们有点先进,对于简单的情况,标准Unix模块就足够了。