我想问你是否可以在用Ocaml编写的程序中调用用python编写的程序,如果答案是肯定的,我该怎么办?
答案 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()以与从命令行调用它相同的方式执行程序。这应该是一个很好的起点。