Вызов программы, написанной на python, в программе, написанной на Ocaml - PullRequest
3 голосов
/ 13 января 2011

Я хотел спросить, можете ли вы назвать в программе, написанной на Ocaml, программу, написанную на python, и если ответ «да», как мне это сделать?

Ответы [ 6 ]

5 голосов
/ 13 января 2011

Что именно вы собираетесь делать? Вы хотите запустить его и забыть об этом? Затем сделайте форк / 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
2 голосов
/ 13 января 2011

Если ваша программа является исполняемым файлом (в противном случае вы бы скомпилировали ее;)), вы можете использовать модуль Unix, как вы используете его в C, например:

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

2 голосов
/ 13 января 2011

Вы можете выполнять команды, используя Sys.command, поэтому вы можете просто сделать Sys.command "python foo.py", предполагая, что python находится в вашем пути, а foo.py в текущем каталоге.

2 голосов
/ 13 января 2011

Не имею никакого реального опыта с этим, но звучит интересно (из Интеграция Python с другими языками wiki ):

Pycaml : писать модули расширения Python в OCaml (вместо C) и использовать код Python и нативные библиотеки из программ OCaml.

1 голос
/ 13 января 2011

Похоже, вы можете использовать библиотеку Shell .

0 голосов
/ 13 января 2011

Это зависит от ваших точных требований, но вы можете использовать pythons os.system () для выполнения программы так же, как вы вызываете ее из командной строки.Это должно быть хорошей отправной точкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...