我有一个由 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')"])
但是,这给了我标准输出的全部输出,answer
只是退出代码。
因此我尝试了这个(示例2):
from subprocess import check_output
answer = check_output(["ruby", "-r", "test.rb", "-e", "puts TestClass.test_function('some meaningful text')"])
这几乎立即为我提供了else 情况下函数的返回值(参见 test.rb)。但是,如果case1为真,则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 脚本中的标准输出无关。示例 1 立即给了我输出。