Как перехватить вывод, созданный с помощью «put» внутри скрипта, и сохранить его в файле в ruby ​​/ rails? - PullRequest
1 голос
/ 21 июня 2011

Из моего скрипта / каталога в приложении rails я пытаюсь захватить вывод, полученный из файла lib, и вместо того, чтобы отображать его на экране, я хочу, чтобы он был сохранен в файл. У меня есть скрипт, который должен отображать вывод на экран, когда он вызывает «put», но перед вызовом метода, который производит вывод, он должен установить что-то, чтобы вызываемая функция регистрировала файл, когда она использует put. Я экспериментировал со следующими двумя файлами в моем приложении rails, но, похоже, они не работают. (Вывод stderr корректно записывается в файл, но результат, полученный в результате простого вызова «put», не сохраняется в файле «a.log» в следующем коде:)

#!/usr/bin/env ruby
require File.dirname(__FILE__) + '/../config/boot'
require File.join(RAILS_ROOT, 'lib/mylogger.rb')

puts "logtest" # should output logtest on the screen

STDERR.puts "logtest" # should also output on the screen

x = STDOUT
y = STDERR
STDOUT = File.new("a.log", "w")
STDERR = File.new("b.log", "w")
m = MyLogger.new
m.run
STDOUT = x
STDERR = y
puts "logtest" # should log to the screen
STDERR.puts "logtest" # should log to the screen

и файл mylogger.rb выглядит следующим образом:

class MyLogger

  def run
    1.upto 1_000_000 do |x|
      puts "mylogger #{x}" # should log to the file a.log, this does not work
      STDERR.puts "mylogger #{x}" # should log to the file b.log, this works
    end
  end
end

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

$stdout.reopen(File.open("a.log", "w"))

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

Я изменил строку

STDOUT = File.new("a.log", "w")

до

$stdout = File.new("a.log", "w")

и я изменился

STDOUT = x

до

$stdout = STDOUT

и это сработало

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...