【发布时间】:2024-01-12 16:31:01
【问题描述】:
我想在用户的编辑器 ($EDITOR) 中打开一个临时文件,让用户在那里写入文本,然后在他关闭此文件后以某种方式使用其内容(例如注入另一个文件)。
在 Ruby 1.9.2 中实现此目的最合适的方法是什么?
【问题讨论】:
标签: ruby file ruby-1.9.2 temporary-files
我想在用户的编辑器 ($EDITOR) 中打开一个临时文件,让用户在那里写入文本,然后在他关闭此文件后以某种方式使用其内容(例如注入另一个文件)。
在 Ruby 1.9.2 中实现此目的最合适的方法是什么?
【问题讨论】:
标签: ruby file ruby-1.9.2 temporary-files
我认为这里甚至不需要 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 标准库的SecureRandom。
http://rubydoc.info/stdlib/securerandom/1.9.2/SecureRandom
【讨论】:
我不确定如何编写一些东西来可靠地检测文件何时关闭。您也许可以在循环中不断检查 File.mtime 之类的内容,以便判断修改时间是否已更改,但这不是一个好方法。
我想知道你为什么要这样做。
如果你想要用户输入,你能不能只使用gets 来代替?
如果您想让输入数据的界面更令人愉悦,最好使用 Ruby Shoes 之类的东西。
最后一个可能需要一点额外编程的选择是将 Ruby 作为原始 Web 服务器有效地运行(并通过 HTML 表单将数据发布到服务器)。为此,您可以使用 Mongrel (gem install mongrel) 之类的东西。
【讨论】:
【讨论】: