R与Python的双向通信
我有一些Python代码,它内部使用了回调函数。我想从R中调用这些代码,并让回调函数能够和R会话进行沟通(比如在回调中执行R代码)。简单来说,当调用这些Python代码时,它就像是R的一个驱动程序。我不太确定该怎么正确地实现这个功能。
像RPy和rPython这样的包似乎无法满足我的需求。因为Python代码在执行回调时需要保持特定的状态,所以从R中连续调用Python函数是不行的。
根据我的了解,唯一的解决方案是要在R中启动一个Python子进程,然后在需要的时候让它们进行沟通。这个沟通的过程大致是这样的:
Python -> R
: 回调命令R -> Python
: 回调的结果
我看了很多其他的方案,但很难找到最佳的沟通策略(希望是双向的,并且不依赖于平台):
- 使用匿名管道。这对我来说似乎是最好的解决方案,不过R似乎只支持读取或写入的管道(不能同时进行)。
- 使用命名管道,这样可以关闭并重新打开,以实现读写功能。R会话需要在调用Python之前和Python完成之后,分别负责创建和移除这个命名管道。
我觉得自己可能把事情搞得太复杂了,但我想不出其他的替代方案。有什么想法吗?
1 个回答
0
这个答案虽然有点老了,但如果有人需要一个不需要安装的工具,可以看看这个:https://github.com/jstar88/pyCommunicator
它可以进行通信,并且可以使用你所需要的回调功能。