私はヒントが見つかったので、私が一緒に手錠をかけたコードを手に入れました。しかし、何かが間違っている、と私はうんざりしています。何も画面に送られず、ファイルは空です。tee(画面とファイル)をしようとしているときにルビーの出力が失われる
#!/usr/bin/env ruby -w
require "stringio"
class Tee
def initialize
date_str = `date '+%Y%m%d_%H%M%S'`.chomp
@log = File.new("tee_output_example_#{date_str}.log","w")
end
["$stdout", "$stderr"].each do |std|
io = eval(std)
old_write = io.method(:write)
class << io
self
end.module_eval do
define_method(:write) do |text|
unless text =~ /^[\r\n]+$/ # Because puts calls twice.
File.open(@log, "a") do |f|
# f.puts [std[1..-1].upcase, caller[2], text].join(" ")
f.puts text
end
end
old_write.call(text)
end
end
end
end
logger = Tee.new()
logger.puts "text on stdout"
logger.puts "Something else"
$stdout = STDOUT
$stderr = STDERR
$stdout.puts "plain puts to $stdout"
$stderr.puts "plain puts to $stderr"
そこに質問はありますか? –
あなたはどのバージョンのRubyをお使いですか? –
受け入れテストは何ですか?例えばあなたはファイルとstdoutで何を見たいですか? –