【发布时间】:2011-10-05 18:08:30
【问题描述】:
我有以下测试 Ruby 脚本:
require 'tempfile'
tempfile = Tempfile.new 'test'
$stderr.reopen tempfile
$stdout.reopen tempfile
puts 'test stdout'
warn 'test stderr'
`mail -s 'test' my@email.com < #{tempfile.path}`
tempfile.close
tempfile.unlink
$stderr.reopen STDERR
$stdout.reopen STDOUT
我收到的邮件内容如下:
test stderr
为什么 stderr 重定向正确但 stdout 不正确?
编辑:作为对评论的回应,我在puts 行之后添加了$stdout.flush,并且打印正确。所以我要重申我的问题:发生了什么,为什么刷新会修复它?
【问题讨论】:
-
切换warn和puts的顺序会发生什么?
-
当我切换
warn和puts的顺序时没有任何反应。 @mu:我将mail更改为cat,正如您所写的那样,但我仍然没有打印出标准输出。我在 CentOS Linux 上使用 Ruby Enterprise Edition 2011.01。
标签: ruby stdout stderr buffering output-redirect