2012-01-29 63 views
1

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

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

回答

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) 

与将它视为问题,是因为它假定在文件中的控制一直是你的应用程序中,但你会希望在另一个操作系统进程打开文件。

要创建的文件名,你可以使用Ruby的标准库的SecureRandomhttp://rubydoc.info/stdlib/securerandom/1.9.2/SecureRandom

0

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

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

如果你想用户输入,你不能只用gets来代替吗?

如果你想让界面更加愉快的输入数据,你最好使用Ruby Shoes之类的东西。

最后一个可能需要额外编程的选项是将Ruby作为原始Web服务器有效运行(并通过HTML表单将数据发布到服务器)。为此,你可以使用像Mongrel(宝石安装杂种)。