我对 OCaml 很陌生,并试图弄清楚如何从 OCaml 内部调用外部程序。
我一直在关注文档 here ,并进行以下调用:
Unix.execv "cat text_file";;
这将返回以下内容:
string array -> 'a = <fun>
我究竟如何访问返回的匿名函数?
cat text_file
是打印文件内容的简单尝试,我实际想要运行的命令有点复杂。但是,我认为如果我可以运行它,我应该能够运行我真正的程序。
最佳答案
execv
的第一个参数是您要运行的程序,第二个是包含参数的数组。另外,execv
需要程序的完整路径;您可以使用 execvp
在执行路径中查找程序。此外,程序的第一个参数是程序本身的名称。
所以你想要"/bin/cat"
作为第一个参数,不是 "cat text_file"
, 和 [| "cat"; "text_file" |]
作为第二个参数(或调用 execvp
并传递 "cat"
作为第一个参数)。
然而,通常情况下,您实际上想要 system
,不是 execv
.
请注意 system
允许您根据需要传递单个字符串,并且 execv
(与 system
不同)永远不会返回,即一旦您调用 execv
您的程序已完成,您调用的应用程序将接管该过程。
关于unix - 从 OCaml 内部调用外部程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4350361/