2015-05-17 74 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 

同樣,這是否是「正確」的方式來做到這一點,或者不是爭論 - 但它的工作。