Unix 使用OCaml收集外部命令的输出

Unix 使用OCaml收集外部命令的输出,unix,ocaml,Unix,Ocaml,调用外部命令并在OCaml中收集其输出的正确方法是什么 在Python中,我可以执行以下操作: os.popen('cmd').read() 如何在OCaml中获得所有外部程序的输出?或者,更好的是,OCaml与Lwt 谢谢。您想要的,请参阅OCaml系统手册3.10版第388页。对于Lwt val pread:?环境:字符串数组->命令->字符串Lwt.t 似乎是一个很好的竞争者。此处的文档:上有许多示例。您可以使用第三方库,该库使用Lwt定义一些高级原语来读取进程的输出。这些在模块中定义的

调用外部命令并在OCaml中收集其输出的正确方法是什么

在Python中,我可以执行以下操作:

os.popen('cmd').read()
如何在OCaml中获得所有外部程序的输出?或者,更好的是,OCaml与Lwt

谢谢。

您想要的,请参阅OCaml系统手册3.10版第388页。

对于Lwt

val pread:?环境:字符串数组->命令->字符串Lwt.t


似乎是一个很好的竞争者。此处的文档:

上有许多示例。

您可以使用第三方库,该库使用Lwt定义一些高级原语来读取进程的输出。这些在模块中定义的原语是:

  • exec\u实用程序
    以字符串形式读取进程的输出
  • exec\u test
    仅读取进程的退出状态
  • exec\u query
    字符串Lwt\u stream.t
  • exec\u filter
    将外部程序用作
    string Lwt\u stream.t->string Lwt\u stream.t
    转换
命令
函数用于创建可以应用先前原语的命令上下文,它具有以下特征:

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" |])))
是一个
字符串Lwt.t
,它返回“uname”命令的“chomped”字符串(新行已删除)。第二个例子

Rashell_Command.(exec_query (command("", [| "find"; "/home/user"; "-type"; "f"; "-name"; "*.orig" |])))
是一个
字符串Lwt_stream.t
,其元素是命令找到的文件的路径

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

Rashell库还定义了一些常用命令的接口,
Rashell\u Posix
中定义了一个很好的
find
命令接口,顺便说一句,它保证了Posix的可移植性。

最近Rashell似乎死了?这看起来很不幸great@Ulrar嗯,我不知道你说的死亡是什么意思,但对我来说,它目前填补了它的工作。你错过了什么?欢迎您开票!:)它似乎不再编译了,看起来它引用了lwt.ppx,据我所知,它已经不存在了,取而代之的是lwt_ppx。Ot是opam中的版本非常古老吗?@Ulrar嗯,我没有关注OCaml和Lwt的最新发展,但也许我现在是时候赶上了。:)如果你在GitHub上打开一张罚单,你会得到一些消息,因为它是固定的。当然,就是这样。已经有一个了,但问题并不完全一样,所以我做了一个新的问题。不过,我预计解决依赖性问题可能会揭示2017年的另一个问题。谢谢
find /home/user -type f -name '*.orig'