在Ocaml程序中调用用Python编写的程序
我想问一下,能不能在一个用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