开发者

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"
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜