2

以下のコードを使用して、コーデックを使用して標準入力から単純に読み取ろうとしています

import codecs

ins = codecs.getreader('utf-8')(sys.stdin, 'replace')
for l in ins:
    print l

小さなデータのバーストで stdout に書き込む別のスクリプトがあります。各バースト後にデータを処理するには、スクリプトが必要です。ただし、コーデックはデータをバッファリングするようです。つまり、stdout に書き込まれた行は、上記のリーダー コードにすぐには表示されません。バッファリングを防ぐために設定できるパラメーターはありますか?

ありがとう!

4

1 に答える 1

2

この一見単純な例には、2 つのレベルのバッファリングがあります。最初のレベルを回避するには (解決策というよりも回避策として)、各行を読み取ってからデコードすることができます。その逆ではありません。これは、utf-8 では行末がまだ明確に \n であるため機能します。(注:この最初のコードは、まだ第 2 レベルのバッファリングがあるため機能しません! 説明のために含まれています)

for l in sys.stdin:
    l = l.decode('utf-8', 'replace')
    print l

2 番目のレベルは から来ていfor l in fileます。したがって、実際には次のものが必要です。

while True:
    l = sys.stdin.readline()
    if not l: break
    l = l.decode('utf-8', 'replace')
    print l
于 2013-06-18T20:56:32.187 に答える