簡體   English   中英

在Python中獲取Ruby函數的返回值

[英]Get return value of ruby function in 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腳本中 ,打印的輸出應轉到stdout。

我嘗試了以下操作( 示例1 ):

from subprocess import call
answer = call(["ruby", "-r", "test.rb", "-e", "puts TestClass.test_function('some meaningful text')"])

但是,這給了我stdout的全部輸出,而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為true,則answer包含整個輸出,但是在運行test.rb時,不會輸出任何內容。

有什么方法可以獲取ruby函數的返回值以及打印到stdout的語句嗎? 理想情況下,該解決方案無需安裝其他模塊。 此外,我無法更改ruby代碼。

編輯:

也嘗試過這樣做,但是在運行ruby腳本時,stdout也沒有輸出( 示例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腳本作為外部進程調用,是使用Ruby腳本設置xmlrpc(或jsonrpc)服務器,然后從Python jsonrpc客戶端(或xmlrpc)調用遠程函數-該值將可以在Python程序中使用,甚至使用的sntax就像在處理普通的Python函數一樣。

在Python中,設置這樣的服務器以遠程公開幾個功能非常容易,並且在Ruby中應該是相同的,但是我從未嘗試過。

查看http://docs.python.org/library/subprocess.html#popen-constructor並研究沖洗標准輸出的紅寶石方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM