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)
这是您要找的吗?您可以以追加模式打开 madlib_output.txt 文件,您想要写入的任何内容都将在块内,例如:“hi”
File.open("madlib_output.txt","a") do |f|
f.puts "hi"
end
Run Code Online (Sandbox Code Playgroud)
有一些方法可以将脚本的输出保存到文件中,而不必修改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)
这样做的好处是,当块退出时,文件将自动关闭。