Я должен признать, что ваш вопрос немного неясен. Я предполагаю, что у вас есть файл с адресами, и вы хотите иметь файл с ответами, полученными с этих адресов.
Почему вы пытаетесь переопределить $stdout
? Может быть, все, что вам нужно, это puts
текст напрямую в файл "out.txt"
?
Попробуйте это: (я удалил все "неважные" детали)
File.open('out.txt','w') do |outfile|
while line = f.gets do
puts "value: #{line}" # This is a "debug" info
outfile.puts "value: #{line}" # This goes to the output file
# ...
Net::HTTP.start(nuri.host, nuri.port) do |http|
request = Net::HTTP::Get.new nuri.request_uri
response = http.request request
outfile.puts "Response"
outfile.puts response.body
end
end
end
Так что, если я правильно понял вашу проблему, вам обычно не нужно «переопределять» стандартный вывод, но вам просто нужно поместить данные в правильный файл. Метод puts
существует и для открытых файлов, и просто «по умолчанию» записывает в стандартный вывод.
Кроме того, я предлагаю использовать стандартную ошибку вместо стандартного вывода, если вы хотите отладочную информацию (не в этом фрагменте кода - просто в некоторых других ситуациях, где это может быть полезно) :
$stderr.puts "Some warning"
или
STDERR.puts "Some warning"
.., какой бы ни выглядел лучше для вас. И переменная, и константа содержат один и тот же объект.