logo       

[ruby-list:42099] Re: puts,printの出力をファイルにも出力するには: msg#00130

lang.ruby.japanese

Subject: [ruby-list:42099] Re: puts,printの出力をファイルにも出力するには

岩崎です。

「puts,print の出力先をファイルにも行う方法」に関して多数
の回答をありがとうございました。回答を自分なりに分析した
ところ、基本的には4つの方法に分類されました。

1.$stdout.writeの再定義 (市川 様)
2.$stdoutへのwriteメソッドをもつオブジェクトの代入。
   a)自分で定義したクラスのインスタンスの代入(永井様)
   b)writeを特異メッソドとして定義したオブジェクトを代入(まつもと 様)
3.ファイルの出力を標準出力へコピーする。(rubikitch 様)
4.パイプ利用 [ms-win32ではruby 1.9要](URABE Shyouhei 様)

私の状況では子プロセスへの出力は無視できる状況でしたので
市川様の案がもっとも作業量が少なくなりますが、途中でファ
イルへの出力を止めることが簡単ですので、まつもと 様の案
を採用することとしました。

ところで、まつもと 様の案を $stterr に適用しようとすると
private method `print' called for #<Object:0x2ab6ec8
@ofile=#<File:log.txt>> (NoMethodError)
と出て上手くいきません。

リファレンスマニュアルでは $stdout と $stderr の動作の違
いを説明するような違いが分かりませんでした。なぜ
違うのかどなたか教えてください。

テストしたコードを添付します。
--------------------------
deferr = Object.new
deferr.instance_eval{@ofile=open("log.txt", "w")}
class <<deferr
def write(str)
STDERR.write(str)
@ofile.write(str)
end
end
$stderr = deferr
$stderr.print "test"

== Iwasaki ==
Email: ih000667@mb.taiyokogyo.co.jp




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise