python中ruby函数的返回值

2024-04-16 12:18:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个由python脚本执行的ruby脚本。在python脚本中,我想访问ruby函数的返回值。在

想象一下,我会有一个ruby脚本测试.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):

^{pr2}$

但是,这给出了stdout的全部输出,answer只是退出代码。在

因此,我尝试了这个(示例2):

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

这给了我函数在else情况下的返回值(参见测试.rb)几乎马上。但是,如果case1为真,answer包含整个输出,但是在运行时测试.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立即给出了输出。在


Tags: 函数answertest脚本示例varstdoutfunction
2条回答

另一种方法是,不用尝试将ruby脚本作为外部进程调用,而是使用ruby脚本设置xmlrpc(或jsonrpc)服务器,并从pythonjsonrpc客户机(或xmlrpc)调用远程函数-该值将在Python程序中提供,甚至使用的sntax也将与您处理的一样一个普通的Python函数。在

在Python中设置这样一个服务器来远程公开几个函数是非常容易的,而且在Ruby中应该是一样的,但是我从未尝试过。在

查看http://docs.python.org/library/subprocess.html#popen-constructor并查看刷新stdout的ruby方法。在

相关问题 更多 >