Когда я делаю $stdout.puts "foo"
, я хочу, чтобы он шел как в стандартный вывод, так и в файл.
Я придумал:
def log_init
$stdout.sync = true
old_out = $stdout.dup
old_out.sync = true
r, w = IO.pipe
$stdout.reopen(w)
fork do
f = File.open('/tmp/test', 'a') do |f|
f.sync = true
while (sel = IO.select([r], [], [], 1000))
readfds, *rest = sel
data = readfds.first.readpartial(1024)
old_out.write(data)
f.write(data)
end
end
end
end
Можете ли вы сделать это, не требуявторой процесс?