在Ruby中查找打印到stdout的所有行

2lpgd968  于 2023-10-18  发布在  Ruby
关注(0)|答案(2)|浏览(94)

Google没有帮我。我有一个很大的Rails项目,其中充斥着print语句或类似的东西。有东西在打印,我找不到是什么。我已经看了规格,我找不到任何应该打印输出。
是否有一个标志可以传递给rspec或ruby,以显示打印到控制台的行号?
或者使用grep命令EG grep -Rl 'p "'来查找所有这些打印语句?
我的rspec输出看起来像这样:

""
..*.****.......*****.........**.""
...""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
...**.......""
hlswsv35

hlswsv351#

$stdout$stderr是变量!在测试配置的早期(可能是spec_helper)

class MyIO < IO
  def puts(*)
    debugger
    super
  end
end

$stdout = $stderr = MyIO.new

MyIO可能需要一个更具体的超类--比如StringIO或File。
你可能只需要运行一次就能找到罪魁祸首。如果您发现它被调用得太频繁,您可以看到,也许可以调整调试器行,使其变得复杂debugger unless caller_is_whitelisted

def caller_is_whitelisted
  return true if caller[2 (give or take)].matches(/some_file_that_may_print/)
  ...
  false
end

这是非常粗糙的代码和超级恶心-但你有一个恶心的问题,这是暂时的。

3npbholx

3npbholx2#

(希望成为评论)
它看起来像某种进度条,有没有任何下载,或加载在您的脚本?可以是必需的依赖关系。
您可以尝试在命令行上重定向stderr(2> Windows 2上的NUL> Linux上的/dev/null),看看这些行是否消失。
也可能有一些选项保持这些行安静(像-quiete -silent或任何类似的)

相关问题