Unix 从OCaml中调用外部程序

Unix 从OCaml中调用外部程序,unix,ocaml,execv,Unix,Ocaml,Execv,我对OCaml还很陌生,我试图弄清楚如何从OCaml内部调用外部程序 我一直在关注文档,并打了以下电话: Unix.execv "cat text_file";; 这将返回以下内容: string array -> 'a = <fun> 字符串数组->'a= 如何准确访问返回的匿名函数 cat text\u file是一个简单的打印文件内容的尝试,实际上我想要运行的命令要复杂一些。但是,我假设如果我可以运行这个程序,我应该能够运行我真正的程序。execv的第一个参数是您要

我对OCaml还很陌生,我试图弄清楚如何从OCaml内部调用外部程序

我一直在关注文档,并打了以下电话:

Unix.execv "cat text_file";;
这将返回以下内容:

string array -> 'a = <fun>
字符串数组->'a=
如何准确访问返回的匿名函数


cat text\u file
是一个简单的打印文件内容的尝试,实际上我想要运行的命令要复杂一些。但是,我假设如果我可以运行这个程序,我应该能够运行我真正的程序。

execv的第一个参数是您要运行的程序,第二个参数是包含参数的数组。另外,
execv
需要程序的完整路径;您可以使用
execvp
在执行路径中查找程序。此外,程序的第一个参数是程序本身的名称。 因此,您希望将
“/bin/cat”
作为第一个参数,而不是
“cat text_file”
,将
[|“cat”;“text_file”|]
作为第二个参数(或者调用
execvp
并将
“cat”
作为第一个参数传递)

但是,通常情况下,您实际上想要的是
system
,而不是
execv


请注意,
system
允许您按需传递单个字符串,
execv
(与
system
不同)永远不会返回,也就是说,一旦调用
execv
,您的程序就完成了,您调用的应用程序将接管该过程。

除了sepp2k所说的,您可能希望研究使用
create\u process
(对于Unix.file\u descr)或
open\u process
(对于通道)。这些函数执行fork/exec并重定向进程的i/o。这样,您就可以与流程进行通信,而这是
系统所无法做到的

如果要在程序中读取
cat
的输出,可以使用
pipe
函数创建管道,然后使用返回的文件描述
create\u process