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

时间:2011-01-13 18:17:37

标签: python ocaml

我想问你是否可以在用Ocaml编写的程序中调用用python编写的程序,如果答案是肯定的,我该怎么办?

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

对此没有任何实际经验,但这听起来很有趣(来自Integrating Python with other languages wiki):

Pycaml:在OCaml(而不是C)中编写Python扩展模块,并使用来自OCaml程序的Python代码和本机库。

答案 2 :(得分:2)

您可以使用Sys.command执行命令,因此只需执行Sys.command "python foo.py",假设python位于您的路径中且foo.py位于当前目录中。

答案 3 :(得分: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

答案 4 :(得分:1)

您似乎可以使用Shell library

答案 5 :(得分:-1)

这取决于您的确切要求,但您可以使用pythons os.system()以与从命令行调用它相同的方式执行程序。这应该是一个很好的起点。