从Ruby调用Python

从Ruby调用Python,python,ruby,Python,Ruby,我有一个编译过的Python库和API文档,我想从Ruby中使用它们 是否可以加载Python库,实例化其中定义的类并从Ruby调用该对象上的方法?给出了一些从Python运行Ruby代码的技术,这些技术也应该适用于相反方向(如XML-RPC或管道),以及从Ruby运行Python代码的特定技术。或者看起来他们可能会做你想做的事。你在Windows上吗?你能创建一个并用Ruby's或调用它吗

我有一个编译过的Python库和API文档,我想从Ruby中使用它们


是否可以加载Python库,实例化其中定义的类并从Ruby调用该对象上的方法?

给出了一些从Python运行Ruby代码的技术,这些技术也应该适用于相反方向(如XML-RPC或管道),以及从Ruby运行Python代码的特定技术。或者看起来他们可能会做你想做的事。

你在Windows上吗?你能创建一个并用Ruby's或调用它吗
<>如果你真的找不到一个等效的Ruby库(或者它是Python的一个巨大的投资,你想利用它),考虑使用一个队列(比如RabByMQ)来实现消息传递设计。然后,您可以保持Python位Python和Ruby位Ruby,而不尝试维护弗兰肯斯坦的构建环境。

这个小库使实现这一点变得非常简单:

听起来您希望使用类似Apache Thrift的东西,它允许您的Python或Ruby代码成为服务器/客户端并相互调用。

您可以根据您的节俭定义在ruby和/或python中实例化您的对象。这是节俭网站的一个例子

struct UserProfile {
    1: i32 uid,
    2: string name,
    3: string blurb
  }
  service UserStorage {
    void store(1: UserProfile user),
    UserProfile retrieve(1: i32 uid)
  }
基本上,您的ruby或python将能够调用
store()
retrieve()
并创建
UserProfile
对象等

下面是一个调用Python的math.sin函数并将其与Ruby中的math.sin进行比较的简单示例:

require 'pycall/import'
include PyCall::Import
pyimport :math
math.sin(math.pi / 4) - Math.sin(Math::PI / 4)   # => 0.0

从Ruby到Python的类型转换会自动对数值、布尔值、字符串、数组和散列执行。

Python库是一个商业测试设备的接口,因此我没有选择更改它或用Ruby重写。您知道这两种产品之间有什么可用的比较吗?很遗憾,没有。我自己也没有用过。我问过Ruby/Python作者关于这个项目的情况,他说这个项目很旧而且没有维护,所以你最好使用Ruby Python。rubypython自2012年以来没有更新过,明确地说不支持python3,我敢打赌它需要更新ruby 2.x——看起来没有进程内解决方案,某种形式的IPC是唯一的出路。是的,现在我可能建议在子进程之间进行JSON通信。哇。这真是太棒了,太巧妙了!它基本上是包装您的代码,并像API一样为它们提供服务。谢谢分享!