2013-05-18 75 views
0

我想從ruby運行python代碼。 我using this gem. Ruby代碼:從Ruby調用python代碼

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

我得到的錯誤: ruby​​python警告:取消定義`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)) 

似乎寶石不起作用。可能是什麼問題?

在此先感謝

+0

據我所知,這允許您在Ruby中使用Python對象,但不能將Python代碼插入Ruby代碼的中間。 –

+0

什麼可以讓我在我的Ruby代碼中使用Python代碼? – Tonja

+0

據我所知,沒有這樣的項目。可以用Ruby重寫你的代碼,也可以將它作爲Ruby腳本中的獨立腳本來調用。 –

回答

0

RubyPython允許你使用Python對象從內紅寶石,但你的代碼必須是有效的Ruby代碼(它只是暴露了在後臺的Python對象工作包裝對象)。你可以使用這個工具將你的代碼翻譯成Ruby等價物,但是在這一點上,你可能只是用Ruby重寫它,這會更清晰,更可讀,更高效。

據我所知,沒有辦法將Python代碼插入到Ruby腳本中並讓它運行。這樣的項目非常適合,而且不太可能有效。

將您的Python代碼重寫爲Ruby代碼,或者讓您的Python代碼成爲一個獨立的腳本,然後您可以使用它從call the Python interpreter運行它。如果你的代碼不需要與其他應用程序進行大量的交互,這當然只是一個選擇,因爲所有的通信都必須使用stdin/stdout來進行。

+0

如果我重寫它,你知道Ruby中的一個函數等價於Python中的fileinput嗎?我正在處理1-5GB的文件,我不想加載整個文件,我想只能加載一行。 – Tonja

+0

@Katja值得注意的是,在Python中不需要'fileinput'來懶懶地讀取文件,這是默認的,因爲文件對象是生成器。我不是Ruby的專家,但[這是第一次谷歌結果*懶惰ruby文件迭代*](http://railsillustrated.com/how-to-be-lazy-in-ruby-and-why-you- should.html)。 –

+0

我用Python中的readline或readline解決了一些問題。它能夠處理4-5 GB的文件。但謝謝=) – Tonja