如何在 Ruby 中临时重定向 stderr?

2023-11-22

我想在一个块的持续时间内临时重定向 Ruby 脚本中的 stderr,确保在块结束时将其重置为其原始值。

我很难在 ruby​​ 文档中找到如何做到这一点。


在红宝石中,$stderr指的是输出流目前使用的作为标准错误,而STDERR is the default标准错误流。可以很容易地临时分配不同的输出流$stderr.

require "stringio"

def capture_stderr
  # The output stream must be an IO-like object. In this case we capture it in
  # an in-memory IO object so we can return the string value. You can assign any
  # IO object here.
  previous_stderr, $stderr = $stderr, StringIO.new
  yield
  $stderr.string
ensure
  # Restore the previous value of stderr (typically equal to STDERR).
  $stderr = previous_stderr
end

现在您可以执行以下操作:

captured_output = capture_stderr do
  # Does not output anything directly.
  $stderr.puts "test"
end

captured_output
#=> "test\n"

同样的原理也适用于$stdout and STDOUT.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ruby 中临时重定向 stderr? 的相关文章

  • 如何使用define_method创建类方法?

    如果您尝试以元编程方式创建类方法 这非常有用 def self create methods method name To create instance methods define method method name do end T
  • 平衡付款 - 有关获取现有买家和商家账户参考信息的文档

    我如何获得已创建的买家和商家帐户的参考 我只是找到创建买家和商家帐户的示例 我没有找到任何有关获取该信息以供重用的示例 是否有关于此的现有文档或只是 rdoc 中的内容 根据对 rdoc 的引用 我假设您在这里使用 Ruby gem 使用唯
  • 捕获并邮寄 bash 脚本错误

    我有一个脚本 每晚在 cron 中运行 为网络上的多个主机备份一些 postgres 数据库 我有一种方法可以通过利用退出状态来收到脚本失败的警报 但它没有告诉我失败的原因 根据以下代码 我如何捕获脚本运行时发生的任何错误 并将其通过电子邮
  • ruby CSV重复行解析

    我有一些需要处理的 CSV 数据 但无法找到匹配重复项的方法 数据看起来有点像这样 line id name item 1 item 2 item 3 item 4 1 251 john foo foo foo foo 2 251 john
  • 从轨道控制器返回

    这是一个初学者 Rails 问题 我这样做之后 format xml head ok 如何从控制器端点返回而不显示视图 如果我此时放弃函数的末尾 我会得到我所期望的结果 但如果我调用 返回 我最终会进入视图 或者在我的情况下会出现缺少的视图
  • Ruby `split':UTF-8 中的无效字节序列(ArgumentError)

    我正在尝试填充电影对象 但是在解析时u item文件我收到此错误 split UTF 8 中的无效字节序列 ArgumentError File open Data u item r do infile while line infile
  • 日期时间到 NSDate

    如何转换字符串2010 11 19T20 00 00Z进入一个NSDate object 我尝试过使用 dateFormatter setDateFormat yyyy MM ddTHH mm ssZ 但看起来我的自定义格式样式错误 PS
  • 忽略 GEM,因为它的扩展尚未构建

    在我的工作和家用计算机上 我最近将 Ruby 升级到 2 3 1 使用ruby install I use chruby作为我的 Ruby 切换器 我开始在我的终端中看到这个警告 Ignoring bcrypt 3 1 11 because
  • 模块何时包含在在 Rails 中运行的 Ruby 类中?

    我正在尝试编写一个方法来告诉我包含特定模块的每个类 它看起来像这样 def Rating rateable objects rateable objects ObjectSpace each object Class do c next u
  • 将 R 与 Rsruby 集成

    我想知道是否有人有将 R 集成到 Rails 中的经验 特别是在 heroku 上 我熟悉 rsruby gem 它是 ruby 与 R 事实上的 也许是唯一的 绑定 但是有关将 R 与 Rails 集成的文档即使不是不存在 也是很少的 比
  • Ruby 中的 Splat 运算符(快速排序示例)

    你好 我正在研究一些 Ruby 代码 在 Ruby 中实现快速排序 1 def qsort lst 2 return if lst empty 3 x xs lst 4 less more xs partition y y lt x 5 q
  • Cucumber 是否不需要编写单元测试?

    我对 Ruby ROR 可用的测试框架数量之多感到有点困惑 我最近看了黄瓜轨道广播 http railscasts com episodes search cucumber并发现它们非常有趣 所以我开始玩游戏 然后努力从概念上考虑在哪里进行
  • 使用 mysql2 gem 获取最后插入的 id

    我有这样的代码 require mysql2 db query insert into clients Name values client 我可以通过 1 个查询返回最后插入的 ID 吗 您可以使用last id客户端实例的方法 clie
  • 该块如何用于整数倍方法?

    我不明白如何n times该行在下面给出的 ruby 代码中工作 特别是逗号的含义以及如何new变量已更新 def fib n raise fib not defined for negative numbers if n lt 0 new
  • 如何将可求和指标压缩为 ruby​​ 表中的唯一标识符

    我正在尝试将可求和指标压缩为 ruby 表中的唯一标识符 我有下表 id1 123 id2 234 id1 345 压缩指标最有效的方法是什么 使其看起来像这样 id1 468 id2 234 我认为其他回答者想太多了 您只需一次操作即可完
  • 打印 STDOUT/STDERR 并将它们写入 Bash 中的文件?

    有没有办法让 Bash 将 STDOUT STDERR 重定向到文件 但仍然将它们打印到终端 这会将 STDOUT 和 STDERR 重定向到同一个文件 some command 2 gt 1 tee file log Example to
  • 如何将输出重定向到 boost 日志?

    我有一个使用boost log的C 程序 我加载了用户提供的动态链接库 我想将 stderr 重定向到 boost 日志 以便用户的库随时执行以下操作 std cerr lt lt Some stuff 它产生相同的结果 BOOST LOG
  • 有没有办法让 Ruby 临时文件永久存在?

    如果我通过创建了一个临时文件Tempfile 除了将其复制到另一个文件之外 还有什么方法可以使其 永久 吗 我想避免它在关联时被删除Tempfile实例被垃圾收集或进程被终止 在相关的一点上 有没有办法利用Tempfile机制 或使用类似的
  • 使用 Devise 和 Rails 从 Twitter Oauth 获取电子邮件

    我已经设置了一个基本的 Rails 应用程序来使用 twitter oauth gem 和设计 并且已经能够登录用户 但是 我的问题是我现在已将我的应用程序列入白名单 并且我想在响应中收到用户的电子邮件 我已遵循 Twitter 端的所有必
  • 为什么对参数哈希进行切片会在批量分配时带来安全问题?

    通过批量分配来预防安全风险的官方方法是使用属性可访问 http api rubyonrails org classes ActiveModel MassAssignmentSecurity ClassMethods html 然而 一些程序

随机推荐

  • 如何计算滚动条滑块的大小?

    我正在用 C 和 XNA 为我的游戏制作自己的自定义 UI 系统 但我在滚动条方面遇到了一个小问题 我不知道计算滚动条拇指大小的公式是什么 假设我有一个 200x200 像素的面板 以及 600x600 像素的图像 如何根据图像大小计算滚动
  • 算术运算期间的数据类型提升:-1 < (unsigned int) 1 == false

    main if 1 lt unsigned char 1 printf less than else printf NOT less than Prints less than 因为 unsigned char 1 被转换为 signed
  • 如何在 Swift 中创建独特的形状或 UIView

    我真的没有任何关于 Swift 绘图的知识 但我希望创建与正方形略有不同的应用程序背景的一部分 请参阅下图了解我正在尝试制作的内容 这个想法是 这将位于屏幕的顶部 只不过是一个背景 它会延伸到屏幕的一半 然后 我将在顶部添加图像等 我需要正
  • django table2 创建带有链接的额外列

    我试图在我的一个表中添加一个额外的列 这会将 url 添加到另一个页面 我的桌子 class ItemTable tables Table edit tables LinkColumn item edit args A pk class M
  • 复制构造函数还是 = 运算符?

    class Foo Foo f Foo g f 我的问题是 标有 的行中正在调用什么 它是默认的复制ctr还是 运算符吗 我的问题是 标有 的行中正在调用什么 它是默认的复制ctr还是 运算符吗 将调用复制构造函数 尽管 正在使用标志 这是
  • 什么会导致 python 模块被导入两次?

    据我了解 python 模块永远不会导入两次 即模块中的代码仅在第一次导入时执行 后续的 import 语句只是将模块添加到导入范围 我有一个名为 TiledConvC3D py 的模块 但它似乎被导入了多次 我使用 pdb 在该模块的代码
  • 如何比较 python 中的 Rpm 版本

    我试图找出如何比较 RPMS 当前安装 和 在本地存储库中可用 的 2 个列表 并查看哪些 RPMS 已过期 我一直在修改正则表达式 但是 RPMS 有很多不同的命名标准 我无法找到一个好的列表来使用 我的驱动器上没有实际的 RPMS 所以
  • Node.js - require 未定义异常[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我是一名完全的 Node js 新手 正在努力学习基础
  • 嵌套 ifelse 语句

    我仍在学习如何将 SAS 代码转换为 R 并且收到警告 我需要明白我在哪里犯了错误 我想做的是创建一个变量来总结和区分人口的三种状态 大陆 海外 外国人 我有一个包含 2 个变量的数据库 身份证国籍 idnat 法国人 外国人 If idn
  • 当用户滚动到页面“附近”底部时加载更多内容?

    我用它来检测滚动到页面底部 但是如何检测距页面底部的距离呢 if window scrollTop window height document height my ajax here 我的意思是我希望该函数在距离底部 100 像素或 20
  • 将秒转换为天、分钟和秒

    我已经设置了将秒转换为天 分钟和秒格式的 挑战 例如 31600000 365 天 46 分钟 40 秒 using namespace std const int hours in day 24 const int mins in hou
  • 是否可以在“某处”添加一个 `before(:each)` 挂钩,以便所有规范文件都可以运行它?

    我正在使用 Ruby on Rails 3 2 2 和 rspec rails 2 8 1 为了制作我的规格文件DRY 不要重复自己 并播种test数据库我想运行一个before each 挂钩所有这些规范文件 也就是说 在我的所有规范文件
  • 一种更Pythonic的迭代列表的方法,同时在每次迭代中排除一个元素

    我有以下代码 items one two three for i in range 0 len items for index element in enumerate items if index i do something with
  • 如何使用 javascript 获取重定向 url?

    我在使用我正在使用的自动化工具显示带有重定向的网址时遇到问题 因此我考虑在打开弹出窗口之前先检查重定向的网址 是否可以使用 javascript 获取重定向 URL 没有 jquery 或其他 js 框架 因为该工具不支持此功能 Thank
  • Linux命令以树的形式打印目录结构

    是否有任何我可以从 Bash 脚本调用的 linux 命令 该命令将以树的形式打印目录结构 例如 folder1 a txt b txt folder2 folder3 这就是您要找的吗tree 它应该存在于大多数发行版中 也许作为可选安装
  • 我可以假设 sizeof(uint8_t) = 1 吗?

    我有一个程序 对 uint8 t 数组使用动态分配 我可以安全吗 假设它的长度总是一个字节 If uint8 t存在 那么sizeof uint8 t 必须是 1 uint8 t is required宽度恰好为 8 并且没有填充位 并且C
  • 使用 browserify 填充 jQuery 插件

    您好 我正在使用 grunt browserify 任务来设置我的代码 我已经在 jQuery 中进行了填充 现在我正在尝试包含 jquery tablesorter jquery插件可以这样与browserify一起使用吗 shim jq
  • PerformSelector:withObject:afterDelay:无法从scrollViewDidZoom工作

    我觉得我应该知道这一点 但我已经被难住了好几个小时 而且我已经没有想法了 原理很简单 用户使用捏合操作来操纵滚动视图中的缩放和定位 如果他们捏捏的时间很短 那么滚动视图就会记录缩放级别和内容偏移量 所以我想我应该在scrollViewDid
  • 类的 mro 方法和 __mro__ 属性有什么区别?

    我偶然发现了这个额外的 无下划线的mro我使用时的方法 metaclass abc ABCMeta 似乎是一样的 mro 只是它返回一个列表而不是元组 这是一个随机示例 创意片段 import abc import copy class L
  • 如何在 Ruby 中临时重定向 stderr?

    我想在一个块的持续时间内临时重定向 Ruby 脚本中的 stderr 确保在块结束时将其重置为其原始值 我很难在 ruby 文档中找到如何做到这一点 在红宝石中 stderr指的是输出流目前使用的作为标准错误 而STDERR is the