使用RubyPython

时间:2015-05-17 17:34:40

标签: python ruby rubypython

我尝试使用RubyPython模块(https://github.com/halostatue/rubypython)从Ruby脚本中执行Python代码。我的模块都设置正确,但我很困惑如何使用它。

如果我有一段Python代码作为文本,请说:

def multiply(x, y):
    return x * y * y

z = multiply(x, y)

我怎样才能将此传递给Python以执行' x'并且' y'在Ruby中动态定义,然后能够检索' z'?

的值

根据评论请求修改 到目前为止,这对我来说很有意义:

RubyPython.start(python_exe: "/usr/bin/python2.6")
cPickle = RubyPython.import("cPickle")
p cPickle.dumps("Testing RubyPython.").rubify
RubyPython.stop # stop the Python interpreter    

这给了我一个"S'Testing RubyPython.'\n."

的输出

我可以运行这样非常简单的命令:

RubyPython.start(python_exe: "/usr/bin/python2.6")
x = 3
y = x * x * x
print "y = %d" % y
RubyPython.stop # stop the Python interpreter

根据预期,这给了我"y = 27"的输出。

但是一旦我尝试在python中定义一个方法,我就会遇到一系列错误:

RubyPython.start(python_exe: "/usr/bin/python2.6")
def my_multiply(x, y):
  return x * y * y
z = my_multiply(2, 3)
print "z = %d" % z
RubyPython.stop # stop the Python interpreter    

我得到syntax error, unexpected ':'

那么如何使用这个模块执行这个python代码块呢?更重要的是,我如何将Ruby中的值传递给正在执行的Python代码?

1 个答案:

答案 0 :(得分:2)

由于没有回答,我设法找到了某些东西(虽然这是一个非常丑陋的东西)。

我完全不确定这是否是使用RubyPython的预期方法,但我能够通过执行以下任务来使功能正常运行:

 > RubyPython.start
 > RubyPython::Python.PyRun_SimpleString <<-PYTHON
*> def test():
*>     print("Hello, World")
*> PYTHON
 > main = RubyPython.import("__main__")
 > main.test()
 >>> Hello, World!
 > RubyPython::Python.PyRun_SimpleString <<-PYTHON
*> def my_mult(x, y):
*>     return x * y
*> PYTHON
 > main.my_mult(10, 20).rubify
 >>> 200

再次,这是否是&#34;正确&#34;这样做的方式是否有争议 - 但它确实有效。