在Ocaml程序中调用用Python编写的程序

3 投票
6 回答
963 浏览
提问于 2025-04-16 09:54

我想问一下,能不能在一个用Ocaml写的程序里调用一个用Python写的程序?如果可以的话,我该怎么做呢?

6 个回答

2

我没有实际的经验,但这个听起来很有趣(来自将Python与其他语言结合的维基):

Pycaml:可以用OCaml语言编写Python的扩展模块(而不是用C语言),并且可以在OCaml程序中使用Python代码和本地库。

2

如果你的程序是一个可执行文件(否则你就得编译它了;)你可以像在C语言中那样使用Unix模块,比如:

let program = "path_to_python_program_exe" in

match Unix.fork () with
    | 0 -> (try
          Unix.execvp program [|program; "any_more_args_here"|]
       with
          _ -> printf "%s" "error while execv\n"; exit (-1))
    | -1 -> printf "%s" "error accured on fork\n"
    | _ -> ignore (wait ()); printf "%s" "parent exit...\n"

在编译的时候,你需要用到unix.cma这个文件,命令是:ocamlc unix.cma you_ml.ml

5

你到底想做什么呢?是想让它运行后就不管了?那就用 fork/exec。还是想运行它并等它完成,但其他时候不做任何事情?那就用 Sys.command。如果你想要读写它,那就用 Unix.open_process*(或者 Unix.create_process*)。

举个例子,如果我想运行 ls 并打印出结果,我可以这样做:

let ls = Unix.open_process_in "ls"
try
  while true do
    Printf.printf "%s\n" (input_line ls)
  done
with End_of_file -> ()
Unix.close_process_in ls

撰写回答