在Ruby中使用临时文件
我想在用户编辑器($editor)中打开一个tempfile,让用户在那里写文本,一旦他关闭这个文件,以某种方式使用它的内容(例如,插入另一个文件)在Ruby中使用临时文件,ruby,file,ruby-1.9.2,temporary-files,Ruby,File,Ruby 1.9.2,Temporary Files,我想在用户编辑器($editor)中打开一个tempfile,让用户在那里写文本,一旦他关闭这个文件,以某种方式使用它的内容(例如,插入另一个文件) 在Ruby 1.9.2中,实现这一点最合适的方法是什么?我不确定如何编写一些东西来可靠地检测文件何时关闭。您可以在循环中不断检查类似于File.mtime的内容,这样您就可以知道修改后的时间是否已更改,但这不是一个好方法 我想知道你为什么要这样做 如果您想要用户输入,您能否不使用get 如果您想让界面更易于输入数据,最好使用Ruby Shoes之类
在Ruby 1.9.2中,实现这一点最合适的方法是什么?我不确定如何编写一些东西来可靠地检测文件何时关闭。您可以在循环中不断检查类似于
File.mtime
的内容,这样您就可以知道修改后的时间是否已更改,但这不是一个好方法
我想知道你为什么要这样做
如果您想要用户输入,您能否不使用get
如果您想让界面更易于输入数据,最好使用Ruby Shoes之类的工具
最后一个可能需要额外编程的选项是有效地将Ruby作为原始web服务器运行(并通过HTML表单将数据发布到服务器)。为此,您可以使用Mongrel(gem install Mongrel)之类的工具。我认为这里甚至不需要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库的SecureRandom
。
尝试+@f.svehla方法