ruby:打开文件对象到stdout

sco*_*eus 4 ruby io stdout file

我是Ruby的新手,我正在尝试打开一个File指向的对象stdout.

我从这个问题中知道,重定向stdout到指向a File非常简单,但是重定向File到指向的是stdout什么?

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

看到这个伪代码:

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

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

puts 'Generating report for XYZ'
report = ReportGenerator::generateReport('XYZ')
o.puts report
Run Code Online (Sandbox Code Playgroud)

如您所见,如果未指定输出重定向选项,我只o希望将报告放入stdout.在"生成报告"消息,但是,我需要仍然被打印到stdout,所以重定向stdout将是麻烦的,尤其是因为我有更多的消息,并有更多的地方,其中我(可能)的输出流之间交替.

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

Ste*_*fan 7

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

if output_redirect_option_is_selected
  o = File.open('given filename','w')
else
  o = $stdout.dup
end
Run Code Online (Sandbox Code Playgroud)

dup-ing $stdout允许您关闭o而不会影响$stdout:

o = $stdout.dup
o.close
puts 'bye' # works as expected
Run Code Online (Sandbox Code Playgroud)

然而:

o = $stdout
o.close
puts 'bye' # raises IOError
Run Code Online (Sandbox Code Playgroud)