我有一个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
我尝试了两个被注释的东西,但是它们都在标准出口处打印结果,在第一个输出变量是空的,在第二个文件中创建但是再次为空:(
有什么想法吗?非常感谢你提前! :)
答案 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
以查看实际的错误输出。