2011-01-13 5 views

Répondre

5

Que comptez-vous exactement faire? Voulez-vous l'exécuter et l'oublier? Ensuite, faites une fourchette/exec. Voulez-vous l'exécuter et attendre jusqu'à ce qu'il soit fini mais sinon ne rien faire? Ensuite, utilisez Sys.command. Voulez-vous lire/écrire? Puis utilise Unix.open_process* (ou Unix.create_process*).

Par exemple, si je veux courir ls et imprimer les résultats, je peux le faire:

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 
+0

J'appelle le programme en python dans le programme ocaml et utilise la sortie dans ce programme. – kafka

+0

Ensuite, utilisez open_process ou create_process. Vous pouvez trouver de la documentation ici: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Unix.html –

+0

pourriez-vous expliquer ce que vous entendez par "fork/exec"? –

-1

Cela dépend de vos besoins exacts, mais vous pouvez utiliser pythons os.system() pour exécuter un programme de la même manière que vous l'appelez à partir de la ligne de commande. Cela devrait être un bon point de départ.

+3

C'est la chose en face - appeler un programme OCaml d'un programme de python. Pas ce qui a été demandé du tout. N'utilisez pas 'os.system()' car le module 'subprocess' est préférable. – nosklo

2

Vous pouvez exécuter des commandes à l'aide Sys.command, de sorte que vous pouvez juste faire Sys.command "python foo.py", en supposant python est dans votre chemin et foo.py est dans le répertoire courant.

2

Si votre programme est un exécutable (sinon vous le compiler;)), vous pouvez utiliser le module Unix comme vous l'utilisez dans C, par exemple:

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" 

Lorsque vous compilez, vous utilisez les unix .cma pour le compilateur: ocamlc unix.cma you_ml.ml

Questions connexes