0
それぞれ独自のエラーを記録するさまざまなサブプログラムで構成されたプログラムを作成しています。実行の終わりに、遭遇したすべてのエラーを、ログに記録されたプログラムによってラベル付けされた画面にダンプしたいと思います。
理想的には私はこのようなものだろう:
Encountered 4 errors during compilation (STDOUT)
Tokenizer Errors: (STDOUT)
Line 4: Invalid symbol found '@' (STDERR)
Parser Errors: (STDOUT)
Line 7: expected 'end' but saw 'while' (STDERR)
Line 7: expected ';' but saw 'while' (STDERR)
Line 12 expected '.' but saw 'end' (STDERR)
をしかし、私は私のプログラムを実行すると$の標準出力ラインと$ stderrのラインアップ混入されています。私は$の標準出力バッファと$ stderrにはないことを知っているので、私は、出力プリントする方法に次の行を追加:
$stdout.sync = $stderr.sync = true
私は2つの出力ストリームを同期する必要があると言われています。しかし、残念ながら私はまだ混乱した出力を受けます。また、$ stdoutに送信したいすべての行の後に$stdout.flush
を追加しようとしましたが、それも効果がないようです。任意の助けをいただければ幸いです
def self.dump()
$stdout.sync = $stderr.sync = true # attempted sync
if not @@lexer_error_log.empty? or not @@parser_error_log.empty?
puts "Encountered #{@@err_cnt} errors during compilation\n"
$stdout.flush #flush
end
if not @@lexer_error_log.empty?
puts "\nTokenizer Errors:"
$stdout.flush # flush
@@lexer_error_log.each {|e| $stderr.puts "\t#{e}\n" }
end
if not @@parser_error_log.empty?
puts "Parser Errors:"
$stdout.flush # flush
@@parser_error_log.each {|e| $stderr.puts "\t#{e}\n" }
end
end
:ここ
は、私が使用していたコードです。
'puts'の追加が別の書き込みとして行われる' \ n'の場合、 'StringIO'に' \ n'を出力し、 'puts'ではなく' print'を使いたいと思うでしょう。 – smparkes