Create a tempfile without opening it in Ruby
Is there a way to create a tempfile, without having it opened? I have to run an executable, redirect it's output to a file, and then read & parse that. Everything created by tempfile
i开发者_JAVA技巧s already opened, and this triggers an error , because the file is locked.
You can also use Dir::Tmpname
Dir::Tmpname.create('your_application_prefix') { |path| puts path }
path will contain unique path
See https://github.com/ruby/ruby/blob/ruby_1_9_3/lib/tmpdir.rb#L116
I didn't get an error:
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
Then again, the temporary file doesn't seem awfully temporary.
Does the error happen with all programs, or just a specific program? Also, can you post the code that causes the problem, and what error backtrace you get?
Is using FileUtils.touch acceptable solution? You can touch a file and delete it once you are done with whatever you want.
You may want to use pipes.
If the executable is started from your ruby program, consider using IO.popen.
If they're different processes, you can try named pipes.
The @timfjord's answer works. But if you don't need a block try:
Dir::Tmpname.create(['prefix-', '.ext']) {}
# => "/tmp/prefix-20190827-1-87n9iu.ext"
精彩评论