unix - 从 OCaml 内部调用外部程序

标签 unix ocaml execv

我对 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/

相关文章:

android - linux 中的 UID 是什么?

parsing - 解决 yacc/ocamlyacc 中的 reduce/reduce 冲突

c - 使用 execv(C 语言)从 linux 命令提示符运行命令

bash - 别名命令更改到最新目录

c - 粉碎堆栈不起作用

linux - 使用 sed 删除最后一个换行符

list - OCaml:List.iter 从匹配后的下一个元素开始

涉及列表的 OCaml 错误

c - 我想在文件中重定向 ls 的 execv,然后在管道中重定向,为什么不起作用?

c - 指针失去其值+ execv 编译警告