我想在用户的编辑器($ EDITOR)中打开一个临时文件,让用户在那里写文本,然后一旦他关闭这个文件以某种方式使用它的内容(例如注入另一个文件)。
在Ruby 1.9.2中实现这一目标最合适的方法是什么?
答案 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的SecureRandom
。
http://rubydoc.info/stdlib/securerandom/1.9.2/SecureRandom
答案 1 :(得分:0)
我不确定如何写一些东西来可靠地检测文件何时关闭。您可以在循环中继续检查File.mtime
之类的内容,以便判断修改时间是否已更改,但这不是一种好方法。
我想知道你为什么要这样做。
如果您想要用户输入,那么您不能只使用gets
吗?
如果你想让界面更舒适地输入数据,你最好使用像Ruby Shoes这样的东西。
可能需要一些额外编程的最终选项是将Ruby有效地作为原始Web服务器运行(并通过HTML表单将数据发布到服务器)。为此,你可以使用类似Mongrel(gem install mongrel)的东西。
答案 2 :(得分:0)