加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby:打开文件对象到stdout

发布时间:2020-12-17 02:48:44 所属栏目:百科 来源:网络整理
导读:我是 Ruby的新手,我正在尝试打开一个指向stdout的File对象. 我从this question知道将stdout重定向到指向文件非常简单,但是重定向文件指向stdout呢? 我正在编写一个程序,我正在考虑为用户提供将部分输出写入文件的选项.如果他们不选择该选项,则应将所有输出
我是 Ruby的新手,我正在尝试打开一个指向stdout的File对象.

我从this question知道将stdout重定向到指向文件非常简单,但是重定向文件指向stdout呢?

我正在编写一个程序,我正在考虑为用户提供将部分输出写入文件的选项.如果他们不选择该选项,则应将所有输出写入stdout.

看到这个伪代码:

if output redirect option is selected
    o = File.open('given filename','w')
else
    o = File.open($stdout,'w')
end

这是一个可能的用例的伪代码:

puts 'Generating report for XYZ'
report = ReportGenerator::generateReport('XYZ')
o.puts report

如您所见,如果未指定输出重定向选项,我只希望将报告添加到stdout.然而,’生成报告’消息,我仍然需要打印到stdout,因此重定向stdout将很麻烦,特别是因为我有更多的消息和更多的地方,我(可能)在输出流之间交替.

o = File.open($stdout,’w’)是我不确定的部分.

解决方法

Ruby的$stdout是一个响应put的 IO实例,所以你可以写:

if output_redirect_option_is_selected
  o = File.open('given filename','w')
else
  o = $stdout.dup
end

复制$stdout允许你在不影响$stdout的情况下关闭o:

o = $stdout.dup
o.close
puts 'bye' # works as expected

然而:

o = $stdout
o.close
puts 'bye' # raises IOError

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读