我想知道从OCaml向Python发送数据的最佳方法,并将Python的响应返回给OCaml.
我能想到的一种天真的方法如下.
1)在OCaml中,将数据写入文件系统上的文件(input.txt).
2)在OCaml中,运行python,打开input.txt并读取数据并将执行结果写入output.txt
3)在OCaml中,打开output.txt并读取结果
有没有其他简单的方法来完成这种任务?
提前致谢.
这是关于如何在两种程序之间进行对话的一般性问题,用不同语言编写.实际上,问题应进一步细分为两个独立的子问题:
第一个问题很笼统.您可以使用不同类型的套接字,管道,共享内存,zmq库等等.这里很难给出任何建议,因为所有选择都有其缺点和优点.也许使用httpover TCPsocket不是一个糟糕的选择,因为它们无处不在,并且在管道的两侧都有优秀的库.另一种方法是使用管道,并使用popen系统调用调用一个或另一个部分,这将为您创建一个进程并返回您可以读取或写入的管道.作为以前的扩展,你甚至可以使用python用作库,并直接从您的ocaml程序调用解释器,并使用代码传递字符串.根据您的任务,它可能适合或不适合.
第二个问题是关于如何序列化OCaml本机类型,比如int字节,然后将此字节读取为python本机int类型,反之亦然.这里有一些解决方案,但不是很多.您可以使用json与ezjsonm在OCaml的库(在蟒蛇有一个json),你可以用cap'n'proto它在OCaml中和Python绑定.此外,还有众所周知的Google协议缓冲区,即protobufs,在OCaml中有几个绑定,包括piqi库,也可以序列化为多种格式.
还有另一种方法,你可以让你将OCaml程序作为一个动态库公开接口C,然后创建一个python模块,并直接将其作为库调用.这不是很容易,因为它需要弄乱构建系统,所以在你有性能要求之前我不推荐它.