2015-05-17 52 views
2

我想使用RubyPython模块(https://github.com/halostatue/rubypython)从Ruby脚本中执行Python代码。我已经正确设置了模块,但是我很困惑如何使用它。用RubyPython执行任意代码块的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",作为预期。

但是,一旦我尝试定义在蟒蛇的方法,我只是得到了一系列的错误:

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代码?

+0

当你按照https://github.com/halostatue/rubypython(提要,基本用法,特定Python版本等)的建议时,你可以显示_你做了什么吗?其中有不少例子应该引导你朝着正确的方向发展。 – boardrider

+0

仅仅是我,还是你在Ruby解释器期待Ruby代码的地方输入Python代码。你的错误“语法错误,未知”:'“似乎同意我的基础。我没有看到RubyPython以这种方式工作的任何示例 - 您应该将其作为字符串并以某种方式将其传递给RubyPython。 **编辑**您列出的第一个示例(您使用Python格式样式进行打印的位置)完全有效且合法的Ruby - 因此它可以工作。在第二个例子中':'不合适,Ruby解释器抱怨。 –

+0

布兰登 - 我的假设和你的一样。我只是不知道如何将该代码作为字符串传递给RubyPython--这是我的问题的症结所在! – Bryce

回答

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 

同样,这是否是“正确”的方式来做到这一点,或者不是争论 - 但它的工作。