【问题标题】:Capturing warning messages捕获警告消息
【发布时间】:2015-10-05 13:14:11
【问题描述】:

有没有办法捕获警告,比如救援异常?我不想简单地禁用警告(通过$VERBOSE = nil),而是想在运行时捕获警告消息的内容。

【问题讨论】:

    标签: ruby warnings ruby-1.9.3


    【解决方案1】:

    您可以将stderr 重定向到 StringIO 对象以捕获字符串中的警告输出:

    require 'stringio'
    
    old_stderr = $stderr
    $stderr = StringIO.new
    Foo = 1
    Foo = 2 # generates a warning
    puts $stderr.string # prints the warning
    $stderr = old_stderr
    

    【讨论】:

      【解决方案2】:
      require 'stringio'
      
      def capture_stderr
        old, $stderr = $stderr, StringIO.new
        result = yield
        [result, $stderr.string]
      ensure
        $stderr = old
      end
      

      【讨论】:

        【解决方案3】:

        这有点难看,因为您将写入文件并且您可能没有写入文件的权限,它会将所有输出隐藏到 $stderr,不仅仅是警告,但它有效:

        $stderr.reopen("errors.txt")
        MyConst = 4
        MyConst = 5   # generates a warning on the standard error output
        $stderr.reopen("errors2.txt")
        puts "The following errors happened:"
        puts File.read("errors.txt")
        

        【讨论】:

        • 可以重定向到一些Ruby内部IO而不是外部文件吗?
        猜你喜欢
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        • 2018-05-02
        相关资源
        最近更新 更多