2016-04-27 17 views
1

システム$ EDITORでtmpfileを開いて書き込みを行い、出力を読み込もうとしています。私はそれを動作させることができますが、なぜfile.readを呼び出すのが空の文字列を返しているのだろうと思います(ファイルに内容があるとき)Ruby:システムプロセスによって書き込まれたファイルからの読み込み

基本的に私はファイルの読み方が正しいに書かれている。

require 'tempfile' 

file = Tempfile.new("note") 

system("$EDITOR #{file.path}") 

file.rewind 
puts file.read # this puts out an empty string "" .. why? 

puts IO.read(file.path) # this puts out the contents of the file 

はい、私は一度使用したファイルをNukeのために確実にブロックでこれを実行しているされます。)私はルビー2.2.2でこれを実行し、Vimを使用していた

+0

あなたはどのバージョンのRubyを使用していますか、どのエディタを使って内容を編集しましたか? –

+0

私はコメントしました - どのような違いがあると思いますか? –

+0

vim以外のものを使用していた場合、 'system'への呼び出しがエディタ自体の前に終了するため、それは違いがあります。私の最初の推測では、エディタがバイトで書かれる前にファイルを読み込もうとしていたということでした。 私はあなたの修正を見つけたと思う、以下の私の答えを参照してください。 –

答えて

1

あなたがそれを読み取ろうとする前に、ファイルオブジェクトのopenを呼び出していることを確認してください:あなたのプロセスはにどんなバイトを書かれていないため、これはまた、あなたがファイルにrewindを呼び出さないようになる

require 'tempfile' 

file = Tempfile.new("note") 

system("$EDITOR #{file.path}") 

file.open 
puts file.read 
file.close 
file.unlink 

あなたがそれを開く時それは。

私はIO.readがあなたのためにいつもファイルを開くと信じています。そのため、その場合にはうまくいきました。 IO-likeオブジェクトで.readを呼び出すと、ファイルが常に開くとは限りません。

+0

Doh!はい、それを開いていたはずです。ありがとう! osxが私に提供している他のシステムエディタと遊び合っていきます(私はそれが少なくとも主要なものを越えて働きたいので)。 Stevenに感謝します! –

関連する問題