如何将Ruby中的puts文本保存到txt文件?

Cou*_*ton 3 ruby file-io append puts

我用Ruby写了一个madlib,想将生成的madlib保存到txt文件中。这是我写的,但是生成的txt文件为空:

file=File.open("madlib_output.txt","a")
file.puts
file.close
Run Code Online (Sandbox Code Playgroud)

Rah*_*ess 6

这是您要找的吗?您可以以追加模式打开 madlib_output.txt 文件,您想要写入的任何内容都将在块内,例如:“hi”

File.open("madlib_output.txt","a") do |f|
 f.puts "hi"
end
Run Code Online (Sandbox Code Playgroud)


the*_*Man 6

有一些方法可以将脚本的输出保存到文件中,而不必修改puts脚本中的每个脚本。

最简单的方法是使用重定向在命令行中路由输出。使用> some_file命令的at 运行脚本将所有STDOUT路由到文件。同样,使用> some_file 2>&1将STDOUT和STDERR都路由到同一文件。gets但是,在代码等待输入时,这不会捕获键入的任何内容,因为这不会算作程序输出。

如果您不介意更改代码,可以通过将其重新分配给文件来临时更改解释器对STDOUT的想法:

old_stdout = $stdout
File.open('output.txt', 'w') do |fo|
  $stdout = fo

  # ----
  # your code goes here
  puts "hello world"
  # ----

end
$stdout = old_stdout
Run Code Online (Sandbox Code Playgroud)

运行该命令,然后查看文件“ output.txt”,即使您没有fo像通常使用那样直接打印到文件句柄,也将看到“ hello world” fo.puts

有多种方法可以执行相同的操作,但是它们等于将STDOUT或STDERR指向其他位置,向它们写入,然后对其进行重置。

通常,如果我们打算从头开始输出到文件,则应该使用一个File.open块:

File.open('output.txt', 'w') do |fo|
  fo.puts "hello world"
end
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,当块退出时,文件将自动关闭。