在Ruby中使用tempfiles

时间:2012-01-29 11:35:03

标签: ruby file ruby-1.9.2 temporary-files

我想在用户的编辑器($ EDITOR)中打开一个临时文件,让用户在那里写文本,然后一旦他关闭这个文件以某种方式使用它的内容(例如注入另一个文件)。

在Ruby 1.9.2中实现这一目标最合适的方法是什么?

3 个答案:

答案 0 :(得分:2)

我认为这里甚至不需要Tempfile。您需要做的就是创建一个临时文件,假设在/ tmp中,使用唯一的文件名,并将其传递给系统(使用正确的编辑器集。如下所示:

def editor_command
  ENV.fetch('EDITOR') { 'vi' }
end

temp_path = "/tmp/editor-#{ Process.pid }"

system "#{ editor_command } #{ temp_path }"

puts File.read(temp_path)

Tempfile的问题在于,它假定对文件的控制始终在您的应用程序中,但您需要在另一个操作系统进程中打开该文件。

要创建文件名,可以使用ruby的std lib的SecureRandomhttp://rubydoc.info/stdlib/securerandom/1.9.2/SecureRandom

答案 1 :(得分:0)

我不确定如何写一些东西来可靠地检测文件何时关闭。您可以在循环中继续检查File.mtime之类的内容,以便判断修改时间是否已更改,但这不是一种好方法。

我想知道你为什么要这样做。

如果您想要用户输入,那么您不能只使用gets吗?

如果你想让界面更舒适地输入数据,你最好使用像Ruby Shoes这样的东西。

可能需要一些额外编程的最终选项是将Ruby有效地作为原始Web服务器运行(并通过HTML表单将数据发布到服务器)。为此,你可以使用类似Mongrel(gem install mongrel)的东西。

答案 2 :(得分:0)