5

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

file=File.open("madlib_output.txt","a")
file.puts
file.close
4

2 回答 2

10

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

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

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

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

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

end
$stdout = old_stdout

运行它,然后查看文件“output.txt”,您会看到“hello world”,即使我们没有直接打印到文件句柄fo,就像我们通常使用fo.puts.

有多种方法可以做同样的事情,但它们相当于将 STDOUT 或 STDERR 指向其他地方,写入它们,然后重置它们。

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

File.open('output.txt', 'w') do |fo|
  fo.puts "hello world"
end

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

于 2014-09-12T21:40:09.630 回答
4

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

File.open("madlib_output.txt","a") do |f|
 f.puts "hi"
end
于 2014-09-12T21:23:25.620 回答