创建一个tempfile而不在Ruby中打开它

时间:2011-06-22 09:22:57

标签: ruby temporary-files

有没有办法创建一个临时文件,而不打开它?我必须运行一个可执行文件,将它的输出重定向到一个文件,然后读取&amp;解析那个。 <{1}}创建的所有内容都已打开,这会触发错误,因为该文件已被锁定。

4 个答案:

答案 0 :(得分:23)

您也可以使用Dir :: Tmpname

Dir::Tmpname.create('your_application_prefix') { |path| puts path }

路径将包含唯一路径

请参阅https://github.com/ruby/ruby/blob/ruby_1_9_3/lib/tmpdir.rb#L116

答案 1 :(得分:1)

我没有收到错误:

Andrew-Grimms-MacBook-Pro:~ agrimm$ irb
>> require "tempfile"
=> true
>> tempfile = Tempfile.new("temporary_file.txt", "/tmp")
=> #<File:/tmp/temporary_file.txt20110622-648-pkynjw-0>
>> tempfile.close
=> nil
>> system("echo foo > #{tempfile.path}")
=> true
>> system("cat #{tempfile.path}")
foo
=> true
>> tempfile.path
=> "/tmp/temporary_file.txt20110622-648-pkynjw-0"
>> exit
Andrew-Grimms-MacBook-Pro:~ agrimm$ cat /tmp/temporary_file.txt20110622-648-pkynjw-0
foo

然后,临时文件似乎不是暂时的。

错误是发生在所有程序中,还是只发生在特定程序中?另外,你可以发布导致问题的代码,以及你得到的错误回溯吗?

答案 2 :(得分:0)

使用FileUtils.touch可接受的解决方案吗?完成所需的任何操作后,您都可以触摸文件并将其删除。

答案 3 :(得分:0)

您可能想要使用管道。

如果从ruby程序启动可执行文件,请考虑使用IO.popen

如果他们是不同的流程,您可以尝试named pipes