我正在与OCaml合作,需要启动一个新流程并与之沟通。
如果子进程在被调用后终止并产生了一些输出,那么如何检索它的stdout中的字符串?
如果子进程永远不会终止怎么办?也就是说,每次给stdin输入一个字符串,它会产生stdout的结果,如何获取结果?
答案 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
模块就足够了。