在 Ruby 脚本中重定向 stdout 时出现问题

2023-12-31

我有以下测试 Ruby 脚本:

require 'tempfile'

tempfile = Tempfile.new 'test'
$stderr.reopen tempfile
$stdout.reopen tempfile

puts 'test stdout'
warn 'test stderr'
`mail -s 'test' [email protected] /cdn-cgi/l/email-protection < #{tempfile.path}`

tempfile.close
tempfile.unlink
$stderr.reopen STDERR
$stdout.reopen STDOUT

我收到的电子邮件内容如下:

test stderr

为什么 stderr 可以正确重定向,但 stdout 却不能正确重定向?

Edit:为了回应评论,我添加了一个$stdout.flush之后puts行并正确打印。所以我会重申我的问题:发生了什么以及为什么冲洗可以修复它?


标准输出通常会被缓冲,以避免每次写入时都进行系统调用。所以,当你这样说时:

puts 'test stdout'

实际上,您只是将该字符串填充到缓冲区中。然后你这样说:

`mail -s 'test' [email protected] /cdn-cgi/l/email-protection < #{tempfile.path}`

和你的'test stdout'字符串仍在缓冲区中,因此它不在tempfile when mail将文件的内容发送给您。法拉盛$stdout强制将缓冲区中的所有内容写入磁盘;来自精美手册 https://ruby-doc.org/core/IO.html#method-i-flush:

将 ios 内的任何缓冲数据刷新到底层操作系统(请注意,这只是 Ruby 内部缓冲;操作系统也可以缓冲数据)。

$stdout.print "no newline"
$stdout.flush

产生:

no newline

标准错误通常是未缓冲的,因此错误消息(应该很少见)立即可见。

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

在 Ruby 脚本中重定向 stdout 时出现问题 的相关文章

  • 从logstash中的文件名获取事件的时间戳

    我们有一个将事件写入文件的进程 没有时间戳 文件名本身带有时间戳后缀 该时间戳应用于文件中的所有事件 现在 我尝试使用logstash的输入文件插件来解析该文件 有没有一种方法可以将文件名获取到字段 以便我可以使用 gsub 过滤器提取时间
  • Ruby 动态变量名

    有没有办法在 Ruby 中创建具有动态名称的变量 我正在读取一个文件 当我找到一个字符串时 会生成一个哈希值 e g file File new games log r file lines do l l split do p if p 1
  • rake db 问题:迁移 -

    我无法为 Ruby on Rails 设置 MySQL 数据库 设置数据库并确保 config database yml 文件匹配后 我遇到了以下错误消息 U Rails alpha gt rake db migrate trace in
  • 如何将文件的元素放入哈希中? -红宝石

    所以我有一个以下形式的文件 Key1 Value1 Key2 Value2 Key3 Value3 用制表符分隔 我的问题是如何打开这个文件并将其放入哈希中 我曾尝试这样做 fp File open file path fp each do
  • 使用 os.write 打印字体图标

    在 Windows 10 上使用 Python 3 8 3 我的终端 使用nerdfont https github com ryanoasis nerd fonts tree master patched fonts Agave有图标的
  • 如何在不初始化Rails的情况下从schema.rb创建数据库?

    我正在尝试从 schema rb 创建所有表 我使用命令 rake db schema load 但是 这失败了 因为在我的一个初始化程序中 它引用了一个显然不存在的模型 表 因为数据库为空 我可以注释掉这些行 然后再次运行 schema
  • ruby 字符串到哈希值的转换

    我有一个这样的字符串 str uu p xx m yy n zz m 我想知道如何将给定的字符串转换为哈希值 即我的实际要求是 有多少个值 符号之前 有m n和p 我不需要计数 我需要一个精确的值 这样输出效果会更好 m gt xx zz
  • 将 iPhone 上的 stderr 写入文件和控制台

    我正在遵循答案中的建议here https stackoverflow com questions 5179108 iphone how to read application logs from device用于将 iOS 设备上的 NS
  • Rails:在任何源中都找不到并发 ruby​​-1.0.5 (Bundler::GemNotFound)

    我已经用谷歌搜索了很多 但没有发现任何对我的情况有用的东西 docker compose up abc 在日志中生成以下内容 usr lib ruby vendor ruby bundler spec set rb 92 in block
  • Ruby/Rails - 如何创建类并从控制器访问它

    我一直在尝试使用一些不同的 gem 在 Rails 3 中显示谷歌地图 但遇到了一些问题 幸运的是我发现了这个https github com YouthTree bhm google maps https github com Youth
  • 查询,无法选择列数

    Tag joins quote tags group quote tags tag id order count desc select count tags id AS count tags id tags name Build quer
  • 黄瓜测试java例子?

    我想尝试使用黄瓜测试的示例应用程序 黄瓜测试可以仅使用 ruby 完成 也可以使用 java 完成 请帮我举一个示例 谢谢 您可以查看我们在我们这里编写的一个简单示例来演示 cucumber jvm https github com gph
  • Ruby 自定义字符串排序

    输入字符串 1654AaBcDddeeFF 输出字符串 1456acddeeABDFF 我尝试过的代码 test array 1654AaBcDddeeFF each byte do char test array lt lt char e
  • 在文档片段中查找注释或文本节点

    我必须清理 Nokogiri HTML DocumentFragment 文档 删除仅包含空格的注释节点和文本节点 这是一个例子 html p paragraph p p paragraph p p paragraph p doc Noko
  • Nokogiri 相当于 jQuery Closest() 方法,用于在树中查找第一个匹配的祖先

    jQuery 有一个可爱的方法 虽然命名有些错误 称为最接近 http api jquery com closest 它会沿着 DOM 树向上寻找匹配的元素 例如 如果我有这样的 HTML table src foo tr td Yay t
  • rspec 测试 has_many :through 和 after_save

    我有一个 我认为 相对简单的has many through与连接表的关系 class User lt ActiveRecord Base has many user following thing relationships has ma
  • C 将标准输出恢复到终端

    我正在使用多线程程序 首先 我将标准输出重定向到某个文件 没问题 我用过dup2 fd 1 where fd是文件的文件描述符 之后 我需要再次将标准输出重定向到终端 我的第一个方法 Declaration fpost t stream s
  • 如何在 Ruby 中转义单引号?

    我通过一个脚本 不是我的 将一些 JSON 传递到服务器 该脚本接受 JSON 作为字符串 JSON 的某些内容包含单引号 因此我想确保在传递给脚本之前对所有单引号进行转义 我已经尝试过以下方法 gt irb gt 1 9 3p194 00
  • 从 Ruby on Rails 3.2.6 中的 Paperclip 生成的文件中删除问号

    我正在使用 Paperclip FFMPEG 将视频文件上传到我的开发环境 并最终在我的项目投入生产时上传到本地服务器 视频上传时 默认文件名如下 system modelnames paperclipnames mynewfile mp4
  • Rails 未定义“2013-03-06”的方法“strftime”:字符串

    我收到错误 2013 03 06 的未定义方法 strftime 字符串 当尝试使用 strftime 从字符串 2013 03 06 正常显示日期 2013 年 6 月星期日 3 日或类似的日期 时 在我的 index html erb

随机推荐

  • Apache Lucene TokenStream 合同违规

    使用 Appache Lucene TokenStream 删除停用词 导致错误 TokenStream contract violation reset close call missing reset called multiple t
  • Ceres Solver:无法禁用日志记录(google glog)

    我在一个项目中使用 ceres 求解器 当我调用ceres Solve函数后 库开始输出如下行 iterative schur complement solver cc 88 No parameter blocks left in the
  • 根据另一个 NSArray 字符串的排序对自定义对象的 NSArray 进行排序

    我有两个NSArray我想要以相同方式排序的对象 一个包含NSString对象 其他自定义Attribute对象 这是我的 关键 NSArray 的样子 The master order NSArray stringOrder NSArra
  • spring-boot 与 tomcat 和 cxf-servlet

    我正在尝试使用 spring boot 来建立嵌入式 Tomcat 我想在应用程序中使用 CXF 来提供一组 Web 服务 但我不知道如何建立 CXF servlet 我的主课看起来像这样 Configuration EnableAutoC
  • 在 Android 中使用相机活动

    如果您想使用使用本机 Android 相机的内置相机 Activity 只需执行以下操作即可 Intent camera new Intent MediaStore ACTION IMAGE CAPTURE this startActivi
  • 为什么我们仍然在 .NET 中使用数据集?

    数据集是 NET 1 0 中最重要的东西之一 即使现在使用 NET 3 5 我仍然发现自己必须使用它们 特别是当我必须调用一个返回数据集的存储过程时 我最终会得到该数据集手动转换为对象以使其更易于使用 我从来没有真正喜欢过数据集 并且发现它
  • django 将 .values_list('datetimefield') 转换为日期

    我想将带有日期时间对象的 value list 字段转换为日期对象 values list time finished flat True 给我 2016 03 22T18 52 53 486Z 我想要的是 2016 03 22 谢谢你 您
  • Autofac多次注册组件

    在上一个关于如何可视化依赖关系图的问题中 https stackoverflow com a 59247007 1955317我为现在用来可视化我的依赖关系图的代码奠定了基础 因为它是由 Autofac 解析的 运行代码 我得到一棵树 生成
  • 为什么java进程使用的内存比预期多得多

    系统信息 操作系统 archlinux JDK OpenJDK IcedTea 2 4 3 ArchLinux 版本 7 u45 2 4 3 1 x86 64 运行应用程序 https github com aemoncannon ensi
  • 是否可以将观察者添加到tableView.contentOffset?

    我需要跟踪 tableView contentOffset y 是否可以将观察者添加到 tableView contentOffset 我认为这是不可能的 因为 contentOffset 不继承 NSObject 类 还有其他解决办法吗
  • 将递归函数转换为异步 CPS 实现 (javascript)

    这是我的功能 function duplicate step through highlighted element jq target jq char cb console log element jq var contents elem
  • 如何在R中手动更改VisNetwork中节点的位置

    我的 VisNetwork 遇到问题 我在 R 中创建了一个图表 每次单击节点并将其移动到其他位置时 它都会回到之前的位置 是否有可能手动重新安排网络 我想将一些节点移动到其他位置或更改一些节点之间的边的长度 以便它更加透明 至少有两种可能
  • 我从 C 函数读取嵌套 lua 表作为参数是否正确?

    我将用C语言实现一个函数 该函数将由Lua脚本调用 这个函数应该接收一个lua表 甚至包含一个数组 作为参数 所以我应该读取表中的字段 我尝试像下面那样做 但是当我运行它时我的函数崩溃了 谁能帮我找出问题所在吗 function findI
  • Fedora 24 上的 libicu 和 stringi 导致 R 头痛

    我最近升级到 F24 现在在我的 R 会话中我无法加载一些包 sp reshape2 latex2exp knitr 等 我发现的最初问题是 F24 使用 libicu56 而这些软件包需要 libicu54 我遵循了一个建议这个线程 ht
  • 如何以编程方式更改 Chrome 中地址栏的字体大小

    我想以编程方式更改 Chrome 中地址栏的字体大小 因为它对我来说太大了 有什么办法可以做到这一点吗 通常 地址栏的字体大小由操作系统的默认字体大小决定 在这里阅读评论 https code google com p chromium i
  • 如何在 Java 中将十六进制字符串转换为字节值

    我有一个字符串数组 我想将它转换为字节数组 我使用Java程序 例如 String str aa 55 转换成 byte new byte 0xaa byte 0x55 我能做些什么 String str Your string byte
  • 通过ParentProcessID杀死进程

    我想通过其 ParentProcessID 终止正在运行的进程 我想像您在命令行中一样执行此操作 wmic process where parentprocessid 3008 terminate 但现在的问题是 在 PowerShell
  • 仪表 D3,显示值位置

    我正在尝试使用一些现成的 JavaScript 来制作仪表 我快到了 但我不知道如何管理值标题 Here is how my code works now And this is how I like it to work 不知道如何处理问
  • 在 Apache Spark (Scala) 中使用 reduceByKey

    我有一个类型为 用户 ID 名称 计数 的元组列表 例如 val x sc parallelize List a b 1 a b 1 c b 1 a d 1 我试图将这个集合简化为一种类型 其中每个 元素名称被计算在内 所以上面的 val
  • 在 Ruby 脚本中重定向 stdout 时出现问题

    我有以下测试 Ruby 脚本 require tempfile tempfile Tempfile new test stderr reopen tempfile stdout reopen tempfile puts test stdou