【发布时间】:2015-06-12 18:43:24
【问题描述】:
我正在使用 OCaml,需要启动一个新进程并与之通信。
如果子进程一旦被调用就终止并产生了一些输出,那么如何在它的 stdout 中检索字符串?
如果子进程永远不会终止怎么办?即每次给stdin一个字符串,它都会产生一个结果到stdout,如何获取结果?
【问题讨论】:
标签: subprocess ocaml stdout
我正在使用 OCaml,需要启动一个新进程并与之通信。
如果子进程一旦被调用就终止并产生了一些输出,那么如何在它的 stdout 中检索字符串?
如果子进程永远不会终止怎么办?即每次给stdin一个字符串,它都会产生一个结果到stdout,如何获取结果?
【问题讨论】:
标签: subprocess ocaml stdout
使用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 模块就足够了。
【讨论】: