我想暂时在一个块的持续时间内将stderr重定向到Ruby脚本中,确保在块结束时将其重置为原始值.
我很难在ruby文档中找到如何做到这一点.
puts "hi"
puts "bye"
Run Code Online (Sandbox Code Playgroud)
我想存储到目前为止的代码的STDOUT(在这种情况下,hi \nbye变成一个变量说'结果'并打印出来)
puts result
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是我已经将R代码集成到我的Ruby代码中,当R代码运行时,其输出被提供给STDOUT,但是在代码内部无法访问输出以进行一些评估.对不起,如果这令人困惑.因此,"放置结果"这一行应该让我高兴和再见.
我试图将哈希打印到文件.
我尝试了unix重定向[逐步添加不同的标志]:
`echo #{pp mymap} | tee summary.out 2>&1`
Run Code Online (Sandbox Code Playgroud)
和文件IO
my_file = File.new(@dir_+"/myfile.out",'w+')
my_file.puts `#{pp get_submap_from_final(all_mapping_file,final_map)}`
Run Code Online (Sandbox Code Playgroud)
它总是打印到控制台并且不写入文件.
还有一种更简单的方法可以在ruby中的一行中写入文件吗?而不是做File.new然后写入文件?
我是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和STDERR,而不是混合它们,因此2>&1在命令shell上执行操作不会对我有用.
我真的不想将这些指向tempfile并将tempfile读回我的脚本.有没有办法可以直接在我的Ruby脚本中获取这两个?
是否可以关闭 $stdout 和 $stderr 并且不将其重定向到文件;只需将其关闭,这样它就不会在任何地方打印任何内容?
我已经尝试过以下代码,但它只是错误error: Invalid argument
$stderr = IO.new(0,"w")
$stdout = IO.new(0,"w")
Run Code Online (Sandbox Code Playgroud)