如何将此puts
方法的输出重定向到文件?
File.open('links.txt').readlines.each do |li|
puts li if (li['PersonNight'])
end
我尝试了一些解决方案,但它们都不起作用。
答案 0 :(得分:2)
您可以显式写入文件(打开文件并写入文件)
file = File.open('target.file', 'w') do |file|
File.foreach('links.txt') do |li|
file.puts(li) if li['PersonNight']
end
end
使用常规的unix机器从脚本外部重定向
ruby my_script.rb > target.file
答案 1 :(得分:0)
File.open('outputfile.txt', 'at') do |out|
File.open('links.txt').readlines.each do |li|
out.puts li if (li['PersonNight'])
end
end
或者,您可以通过将输出文件分配到$stdout
来重定向Kernel#puts
的输出:
old_stdout, $stdout = $stdout, File.open('outputfile.txt', 'at')
File.open('links.txt').readlines.each do |li|
puts li if (li['PersonNight'])
end
f, $stdout = $stdout, old_stdout
f.close
但这是一个非常糟糕的主意。您为系统中的所有代码重定向puts
。