我有一个由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立即给出了输出。在