Ruby将输出重定向到文件

时间:2017-06-06 09:33:41

标签: ruby io-redirection

如何将此puts方法的输出重定向到文件?

File.open('links.txt').readlines.each do |li|
  puts li if (li['PersonNight'])
end

我尝试了一些解决方案,但它们都不起作用。

2 个答案:

答案 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)

您可以在IO#puts对象上为您要写入的文件调用IO

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