Ruby:从系统进程写入的文件中读取

时间:2016-04-27 13:26:16

标签: ruby file io

我试图在系统$ EDITOR中打开一个tmp文件,写入它,然后读取输出。我可以让它工作,但我想知道为什么调用file.read返回一个空字符串(当文件确实有内容时)

基本上我想知道一旦写入文件就读取文件的正确方法。

require 'tempfile'

file = Tempfile.new("note")

system("$EDITOR #{file.path}")

file.rewind
puts file.read # this puts out an empty string "" .. why?

puts IO.read(file.path)  # this puts out the contents of the file

是的,我将在一个确保块中运行它,以便在使用后对文件进行核对;)

我在ruby 2.2.2上使用vim运行它。

1 个答案:

答案 0 :(得分:1)

在尝试阅读之前,请确保在文件对象上调用open

require 'tempfile'

file = Tempfile.new("note")

system("$EDITOR #{file.path}")

file.open
puts file.read
file.close
file.unlink

这也可以让你避免在文件上调用rewind,因为你的进程在你打开它的时候没有写任何字节。

我相信IO.read将始终为您打开文件,这就是为什么它适用于这种情况。而在类似IO的对象上调用.read并不总是为您打开文件。