【问题标题】:In OCaml, how to get stdout string from subprocess?在 OCaml 中,如何从子进程中获取标准输出字符串?
【发布时间】:2015-06-12 18:43:24
【问题描述】:

我正在使用 OCaml,需要启动一个新进程并与之通信。

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

  2. 如果子进程永远不会终止怎么办?即每次给stdin一个字符串,它都会产生一个结果到stdout,如何获取结果?

【问题讨论】:

标签: subprocess ocaml stdout


【解决方案1】:

使用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 模块就足够了。

【讨论】:

    猜你喜欢
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    相关资源
    最近更新 更多