我在Ruby中编写了一个madlib,并希望将生成的madlib保存到txt文件中。这是我写的,但生成的txt文件是空的:
file=File.open("madlib_output.txt","a")
file.puts
file.close
答案 0 :(得分:5)
有一些方法可以将脚本输出保存到文件中,而无需修改脚本中的每个puts
。
最简单的方法是使用重定向在命令行路由输出。在命令的命令下运行带有> some_file
的脚本会将所有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
运行它,然后查看文件“output.txt”,你会看到“hello world”,即使我们没有直接打印到文件句柄fo
,就像我们通常那样做使用fo.puts
。
有多种方法可以做同样的事情,但它们相当于将STDOUT或STDERR指向其他地方,写入它们,然后重置它们。
通常,如果我们打算从开始输出到文件,那么我们应该使用File.open
块:
File.open('output.txt', 'w') do |fo|
fo.puts "hello world"
end
这样做的好处是当块退出时文件将自动关闭。
答案 1 :(得分:3)
这是你要找的吗?你可以在附加模式下打开madlib_output.txt文件,你想要写的任何内容都将在块中,例如:" hi"
File.open("madlib_output.txt","a") do |f|
f.puts "hi"
end