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') 是我不确定的部分.
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)
| 归档时间: |
|
| 查看次数: |
1607 次 |
| 最近记录: |