我有一個ruby腳本,它被python腳本執行。從python腳本中我想訪問ruby函數的返回值。在python中獲取ruby函數的返回值
想象一下,我想有這樣的Ruby腳本test.rb:
class TestClass
def self.test_function(some_var)
if case1
puts "This may take some time"
# something is done here with some_var
puts "Finished"
else
# just do something short with some_var
end
return some_var
end
end
現在,我想該函數的返回值進入我的python腳本,打印輸出應去標準輸出。
我嘗試以下(例如1):
from subprocess import call
answer = call(["ruby", "-r", "test.rb", "-e", "puts TestClass.test_function('some meaningful text')"])
然而,這給了我整個輸出的標準輸出和answer
只是退出代碼。
所以我想這(例2):
from subprocess import check_output
answer = check_output(["ruby", "-r", "test.rb", "-e", "puts TestClass.test_function('some meaningful text')"])
這使我的功能在其他情況(見test.rb)幾乎立即返回值。但是,如果case1爲真,answer
包含整個輸出,但運行test.rb時不會打印任何內容。
有沒有辦法獲得ruby函數的返回值和打印到stdout的語句?理想情況下,該解決方案不需要安裝額外的模塊。此外,我無法更改Ruby代碼。
編輯:
也試過這個,但是這也給沒有輸出stdout上運行Ruby腳本而(例如3):
import subprocess
process = subprocess.Popen(["ruby", "-r", "test.rb", "-e", "puts TestClass.test_function('some meaningful text')"], stdout=subprocess.PIPE)
answer = process.communicate()
我也認爲這是沒有的事將輸出刷新到ruby腳本中的stdout。例1給我立即輸出。
它與其他程序是否用Ruby編寫無關。您需要使用popen從標準輸出中獲取輸出流。 – texasbruce 2012-04-25 20:47:15