2016-05-05 14 views
6

にstdoutに書き込むとき、私は、これはいくつかの奇妙な出力を与えることに気づいたとき、私はちょうどPythonのコンソールにsys.stdout.write()で遊んでました。関数に渡されるすべてのwrite()コール書かれた文字の数については、奇妙な出力コンソール

は、それぞれの出力に追加取得します。例えば、 foo bar7が印刷される。

はさえ0の出力に空の文字列の結果を渡します。

これは本当に唯一のPythonコンソールで起こるが、同じ文を使用してファイルを実行していないとき。さらに興味深いことに、それだけではPython 3のために起こるが、それはコンソールだけに起こるようではないが、この

Pythonの2のために、本当に私にとって問題ではない、それはこのように振る舞う、なぜ私は本当に不思議。

私のPythonバージョンは、Ubuntu 15.10で3.5.1です。

答えて

8

writeは、文字数(実際にはバイト数は、sys.stdout.write('へllö'))を返します。pythonコンソールは各式の戻り値をstdoutに出力するので、実際の値に戻り値が追加されます印刷された価値。

writeは任意の改行を追加していないので、それは同じ文字列のように見えます。

あなたはこれを含むスクリプトでこれを確認することができます。

#!/usr/bin/python 
import sys 

ret = sys.stdout.write("Greetings, human!\n") 
print("return value: <{}>".format(ret)) 

このスクリプトは、出力を実行する必要がある場合:

Greetings, human! 
return value: <18> 

この動作はドキュメントhereに記載されています。

+0

興味深い。だから、 'a = sys.stdout.write( 'foo')'は実際に何をするのかをこの挙動で明らかにする必要があります。この場合、 'a'は' 3'に設定され、数字は出力にもう追加されません。しかし、私はまだこれがPython 3でしか起こらないのだろうと思っています。Afaik私はまた、この文書の中で何の言及も見つけられません。 – critop

+0

私は結果を示すスクリプトを添付して、より明確にしました。私は実際にこれについてのドキュメントを読んでいない、それはかなりの言語で発生し、それをテストしたので、私はそれを仮定した。私はこれを言及したPEPを探して、私がすればここに戻ってきます。 – Noctua

+2

追加するだけで、Unicode文字をカウントします。 'sys.stdout.write( 'へllö')'は 'llö4"を返します – C14L