从Ruby调用python代码

时间:2013-05-18 12:14:03

标签: python ruby

我想从ruby运行一个python代码。 我是using this gem.  Ruby代码:

require "rubypython"    
RubyPython.start    
fileinput=RubyPython.import("fileinput")
RubyPython.stop

我收到错误: rubypython警告:取消定义`object_id'可能会导致严重问题

Ruby代码:

require "rubypython"

RubyPython.start 

fileinput=RubyPython.import("fileinput")

name=''
name2=""
r=0
i=0
open_file=fileinput.input("lala")
output=open("lalal","w")
for line in open_file:
    keys=line.split()
    length=(len(keys))
    if length==3:       

        if (keys[0]!=name and i!=0):
            output.write("%s\t%s\t%s\n"%(name,name2,r))             
            name=keys[0]
            name2=keys[1]
            r=float(keys[2])        


output.write("%s\t%s\t%s\n"%(name,name2,r))
output.close()

RubyPython.stop

我收到错误:

unique.rb:12: syntax error, unexpected ':', expecting keyword_do_cond or ';' or '\n'
unique.rb:15: syntax error, unexpected ':', expecting keyword_then or ';' or '\n'
    if length==3:       
                 ^
unique.rb:17: syntax error, unexpected ':', expecting keyword_then or ';' or '\n'
unique.rb:18: syntax error, unexpected ')', expecting '='
            output.write("%s\t%s\t%s\n"%(name,name2,r)) 

似乎宝石不起作用。可能是什么问题?

提前致谢

1 个答案:

答案 0 :(得分:0)

RubyPython允许您在Ruby中使用Python对象,但您的代码必须是有效的Ruby代码(它只是暴露了在后台使用Python对象的包装器对象)。您可以使用此工具将您的代码转换为Ruby等效,但此时,您可能只需在Ruby中重写它,它将更干净,更易读,更高效。

据我所知,没有办法将Python代码插入Ruby脚本并让它运行。这样一个项目非常出色,不太可能有任何效率。

将Python代码重写为Ruby代码,或者将Python代码作为独立脚本,然后您可以call the Python interpreter从Ruby运行它。如果您的代码不需要与应用程序的其余部分进行大量交互,那么这自然只是一个选项,因为所有通信都必须使用stdin / stdout进行。