0

print追加テキスト用に Python でステートメントをカスタマイズしたいと考えています。しかし、私のアプローチでは、Enterキーが入力にバッファリングされているようです。

私が使用したプログラムは次のとおりです。

class rename_print:
    def __init__(self, stdout):
        self.stdout = stdout     
    def write(self, text):
        self.stdout.write('###' + text)     
        self.stdout.flush()
    def close(self):
        self.stdout.close()

import sys

prints = rename_print(sys.stdout)
sys.stdout = prints
print 'abc'

私が得る出力は

###abc###

私が期待した出力は

###abc

この理由は何でしょうか?入力ストリームがEnterキーでバッファリングされているとは思えません。この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

printデフォルトごとに出力ストリームに改行文字を書き込みます (または各引数間のスペース)。そのため、 への呼び出しが 2 つ取得されます。1 つは でwrite、もう"abc"1 つは"\n"です。

したがって、その動作が望ましくない場合は、その呼び出しを個別に処理する必要があります。

于 2012-05-13T13:11:53.457 に答える
1

起こっていることは、印刷が暗黙的に改行を追加することだと思います。この余分な出力は、リダイレクトされた書き込み関数も呼び出しているため、別の「###\n」が表示されます

少しハックですが、これを試してください:

...

def write(self, text):
    if text!="\n":
       self.stdout.write('###' + text)

...

于 2012-05-13T13:20:33.953 に答える