From: Robert Klemme Date: 2003-11-17T10:26:03+09:00 Subject: Re: can't flush print when download open-uri Maybe it's because you didn't terminate with "\n". "T. Onoma" schrieb im Newsbeitrag news:E1AJs2a-0004hd-RA@odie.runbox.com... > I'm confused. why won't this print? I tried flushing the $defout and $stdout as well as the source_file_io, but that doesn't work either. I'd try $defout.sync=true then you don't need the flushes. > # download > prioritized_locations.each do |location| > begin > source_file_io = File.open(self.source_path,'w') > remote_file = open(location) > while incoming = remote_file.read(512) > source_file_io.write(incoming) > # THIS WON'T THIS PRINT!!!!!!!!!!! > print "\ca{source_file_io.pos}KB/#{@source_size}KB" did you mean print "#{source_file_io.pos}KB/#{@source_size}KB\n" ? > end > rescue > puts "#{location} failed" > remote_file.close unless remote_file.nil? > source_file_io.close unless source_file_io.nil? Closing here is superfluous since "ensure" takes care of that. > next # try next location superfluous as well. > else > puts ' Done.' > break # we got it superfluous as well. > ensure > remote_file.close unless remote_file.nil? > source_file_io.close unless source_file_io.nil? > end > end In the end we get much cleaner code: require 'open-uri' # download $defout.sync = true prioritized_locations.each do |location| begin File.open(self.source_path,'w') do |source_file_io| open(location) do |remote_file| while incoming = remote_file.read(512) source_file_io.write(incoming) print "#{source_file_io.pos}KB/#{@source_size}KB " end end end rescue => e $stderr.puts "#{location} failed: #{e}" else puts 'Done.' end end This works for me - and does print. robert