ruby: 打开文件对象到标准输出

ruby: open File object to stdout

我对 Ruby 很陌生,我正在尝试打开一个指向 stdout.

File 对象

我从 this question 知道重定向 stdout 指向 File 很简单,但是重定向 File 指向 [=14= 呢? ]?

我正在编写一个程序,我正在考虑为用户提供将输出的 部分 写入文件的选项。如果他们选择该选项,则所有输出都应写入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

如您所见,如果未指定输出重定向选项,我只希望 o 将报告放入 stdout。 'Generating report' 消息,但是,我仍然需要打印到 stdout,因此重定向 stdout 会很麻烦,特别是因为我有更多的消息和更多的地方(可能)在输出流之间交替。

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

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

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

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

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

鉴于:

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