Создать временный файл, не открывая его в Ruby - PullRequest
7 голосов
/ 22 июня 2011

Есть ли способ создать временный файл, не открывая его?Я должен запустить исполняемый файл, перенаправить его вывод в файл, а затем прочитать и проанализировать это.Все, что создано tempfile, уже открыто, и это вызывает ошибку, потому что файл заблокирован.

Ответы [ 4 ]

23 голосов
/ 17 июля 2012

Вы также можете использовать 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 голос
/ 22 июня 2011

Я не получил ошибку:

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

С другой стороны, временный файл не выглядит ужасно временным.

Ошибка возникает со всеми программами иликонкретная программа?Кроме того, вы можете опубликовать код, который вызывает проблему, и какую ошибку вы получите?

0 голосов
/ 22 июня 2011

Вы можете использовать трубы.

Если исполняемый файл запущен из вашей программы ruby, рассмотрите возможность использования IO.popen .

Если это разные процессы, вы можете попробовать именованные каналы .

0 голосов
/ 22 июня 2011

Является ли использование FileUtils.touch приемлемым решением?Вы можете прикоснуться к файлу и удалить его, как только вы закончите с тем, что вы хотите.

...