我正在尝试将哈希打印到文件中。
我尝试了unix重定向[逐步添加不同的标志]:
`echo #{pp mymap} | tee summary.out 2>&1`
和文件IO
my_file = File.new(@dir_+"/myfile.out",'w+')
my_file.puts `#{pp get_submap_from_final(all_mapping_file,final_map)}`
它始终打印到控制台并且不会写入文件。
还有一种更简单的方法可以在ruby中的一行中写入文件吗?而不是做File.new,然后写入文件?
答案 0 :(得分:48)
require 'pp'
File.open("test.txt","w") do |f|
PP.pp(self,f)
end
答案 1 :(得分:2)
这里使用反引号很困惑,因为它们用于执行shell命令。
你的意思是:
File.open(@dir_+"/myfile.out",'w+') do |f|
f.write(pp(get_submap_from_final(all_mapping_file,final_map)))
end
pp
方法始终写入控制台,以便您可以看到它并仍然将其写入。
答案 2 :(得分:1)
怎么样(不直接使用pp):
File.open("myfile.out","w+") do |f|
f.puts mymap.inspect
end
甚至可以重定向stdout以获取文件
file = File.open("myfile.out", "w+)
old_stdout = STDOUT
$stdout = STDOUT = file
pp get_submap_from_final(all_mapping_file,final_map)
$stdout = STDOUT = old_stdout
答案 3 :(得分:0)
做一些类似于Edu建议和How do I redirect stderr and stdout to file for a Ruby script?帮助的事情。
以下是新代码的相似之处:
$stdout.reopen(@dir_+"/my_file.out",'w+')
puts "All metrics are:"
pp final_map
$stdout=STDOUT
仍然有兴趣知道为什么重定向运算符> ,&2>& 1 in back-ticks不起作用
答案 4 :(得分:0)
根据问题中的mymap
,您可以使用"show_data" gem,它提供两种方法:show_data
和format_data
。后者产生了一个漂亮的印刷"其参数的字符串,然后可以提供给任何输出方法。
require 'show_data'
$stderr.puts format_data(mymap)
例如:
myhash = { 'owners' => 21050, 'users' => 16877, 'portfolios' => 583,
'properylists' => 0, 'properties' => 29504, 'units' => 62688,
'tenants' => 85856 }
$stderr.puts format_data(myhash)
STDERR上的:
{ 'owners' => 21050,
'users' => 16877,
'portfolios' => 583,
'properylists' => 0,
'properties' => 29504,
'units' => 62688,
'tenants' => 85856
}
答案 5 :(得分:-1)
require 'pp'
class File
def pp(*objs)
objs.each {|obj|
PP.pp(obj, self)
}
objs.size <= 1 ? objs.first : objs
end
end
File.open('output','w') do |file|
file.pp mymap
end
答案 6 :(得分:-1)
这是对上面帖子的扩展,也是将json输出打印到文件中。
require "pp"
require "json"
class File
def pp(*objs)
objs.each {|obj|
PP.pp(obj, self)
}
objs.size <= 1 ? objs.first : objs
end
def jj(*objs)
objs.each {|obj|
obj = JSON.parse(obj.to_json)
self.puts JSON.pretty_generate(obj)
}
objs.size <= 1 ? objs.first : objs
end
end
test_object = { :name => { first: "Christopher", last: "Mullins" }, :grades => [ "English" => "B+", "Algebra" => "A+" ] }
test_json_object = JSON.parse(test_object.to_json)
File.open("log/object_dump.txt", "w") do |file|
file.pp(test_object)
end
File.open("log/json_dump.txt", "w") do |file|
file.jj(test_json_object)
end