2012-01-29 36 views
1

我想在用戶的編輯器($ EDITOR)中打開一個臨時文件,讓用戶在那裏寫文本,並關閉這個文件以便以某種方式使用它的內容(例如注入另一個文件)。在Ruby中使用臨時文件

什麼是在Ruby 1.9.2中實現這個最合適的方法?

回答

2

我不認爲在這裏甚至需要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) 

與將它視爲問題,是因爲它假定在文件中的控制一直是你的應用程序中,但你會希望在另一個操作系統進程打開文件。

要創建的文件名,你可以使用Ruby的標準庫的SecureRandomhttp://rubydoc.info/stdlib/securerandom/1.9.2/SecureRandom

0

我不知道如何編寫一些東西來可靠地檢測文件何時關閉。您可以在循環中繼續檢查諸如File.mtime之類的東西,以便您可以確定修改時間是否已更改,但這不是一個好的做法。

我想知道你爲什麼試圖這樣做。

如果你想用戶輸入,你不能只用gets來代替嗎?

如果你想讓界面更加愉快的輸入數據,你最好使用Ruby Shoes之類的東西。

最後一個可能需要額外編程的選項是將Ruby作爲原始Web服務器有效運行(並通過HTML表單將數據發佈到服務器)。爲此,你可以使用像Mongrel(寶石安裝雜種)。