Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Ruby中使用临时文件_Ruby_File_Ruby 1.9.2_Temporary Files - Fatal编程技术网

在Ruby中使用临时文件

在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之类

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


在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方法