2

RubyPython モジュール ( https://github.com/halostatue/rubypython ) を使用して、Ruby スクリプト内から Python コードを実行しようとしています。モジュールをすべて正しくセットアップしましたが、使用方法が非常に混乱しています。

テキストとして Python コードのブロックがあった場合、次のように言います。

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

z = multiply(x, y)

これを Python に渡して、Ruby で動的に定義された「x」と「y」を使用して実行し、「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 コードに値を渡すにはどうすればよいかということです。

4

1 に答える 1

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

繰り返しますが、これが「正しい」方法であるかどうかは議論の余地がありますが、うまくいきました。

于 2015-05-18T21:12:56.833 に答える