从ruby脚本中获取python测试的输出

时间:2014-04-20 13:58:33

标签: python ruby

我有一个Python项目,在不同的文件夹和文件中有一些测试。我想编写一个脚本来执行项目的所有测试并输出一些结果。我希望它是一个ruby脚本(因为我比Python更了解Ruby,现在我更喜欢它)而且我正在考虑从测试中获取输出并用ruby解析它们并输出像"总共进行了48次测试,一切正常#34;而不是python的输出。

长话短说 - 我希望我能在变量或文件中获取python test_something.py的输出,而我在屏幕上不需要任何内容​​。

以下是我的尝试:

tests = Dir.glob("**/test_*")
wd = Dir.pwd

output = ''
tests.each do |test|
  Dir.chdir(File.dirname(test))
  # output += `python #{File.basename(test)}`
  # system("python #{File.basename(test)} >> f.txt")
  Dir.chdir(wd)
end

我尝试了两个被注释的东西,但是它们都在标准出口处打印结果,在第一个输出变量是空的,在第二个文件中创建但是再次为空:(

有什么想法吗?非常感谢你提前! :)

2 个答案:

答案 0 :(得分:1)

使用Open3.capture2,如下所示:

output, _ = Open3.capture2("python #{File.basename(test)")

要将输出写入文件,请执行以下操作:

File.write("f.txt", output)

答案 1 :(得分:1)

测试框架可能已将结果发送到STDERR。尝试使用Open3.capture3捕获标准错误。

require 'open3'

...

stdout, stderr, status = Open3.capture3(%{python "#{File.basename(test)}"})

并将标准输出和标准错误写入目标:

File.write("f.txt", stdout + stderr)

您可以检查status.success?以查看您是否正确编写外部命令。但是,测试框架可能会在失败的测试中返回非零退出代码。在这种情况下,您应该检查stderr以查看实际的错误输出。