2016-09-20 4 views
0

を書くこの動作の種類についていくつかの質問があります。のPythonインタプリタ3プリント長が

>>> import sys 
>>> sys.stdout.write("aaaa") 
aaaa4 
>>> 

は、私はそこに何が起こっているか理解しています。私が理解していないことは、私の場合に起こっていることです。開いているファイルに関係なく、.writeメソッドを使うたびに、データの長さはstdoutに書き込まれます。

D:\>type CON > test.py 
with open("garbage.file", "wb") as f: 
    f.write(b"xyz") 

^Z 

D:\>python test.py 

D:\>type garbage.file 
xyz 
D:\> 

これは、Windowsのコマンドプロンプト上で使用される任意の新鮮なのPython 3.5インタプリタで発生します(次のいずれか

>>> with open("garbage.file", "wb") as f: 
...  for x in range(4): 
...   f.write(b"xyz") 
... 
3 
3 
3 
3 
>>> with open("garbage.file", "rb") as f: 
...  assert f.read() == b"xyzxyzxyzxyz" 
... 
>>> 

しかし、この動作はないは、私がスクリプトとしてpython実行してみましょうするときに発生し「通常」cmdまたは「アナコンダプロンプト」)。

>>> import sys 
>>> sys.version 
'3.5.2 |Anaconda 4.1.1 (64-bit)| (default, Jul 5 2016, 11:41:13) [MSC v.1900 64 bit (AMD64)]' 
>>> 

私はこれまでにこのような動作を見たことがなく、どちらかと思われるようには見えませんでした。何が原因だろうか?どうすれば解決できますか?

答えて

4

これは、この質問の重複であるように思わ:sys.stdout.write in python3 adds 11 at end of string

.write()は、それがファイルに書き込まれています後に書かれた文字の数を返すことを説明しています。これはなぜインタプリタで表示されるのか、あなたが作成したファイルではないのかを説明します。

編集:インタープリタを示す例は戻り値を表示し、python実行可能ファイルは無視します。 python実行ファイルは、インタプリタがないのに対し、返された値が表示されないので、

$ python show.py 
foobar 

これは、次のとおりです。

>>> def show(string): 
...  print(string) 
...  return(len(string)) 
... 
>>> show('foobar') 
foobar 
6 

は今、私は私が手にまったく同じ内容のファイルを作成する場合。

+0

私はこれがどのように重複しているのか分かりません。私はPythonプロンプトに式を書いているのではなく、文を書いています。さらに、これは、*実行されるたびに式文*の値を出力する方法を説明しません。確かに、これは異常な動作です。 –

+1

申し訳ありませんが、おそらく私はこれを重複と呼ぶのが早かったでしょう。しかし、私はリンクされたスレッドはあなたの問題が何であるかを説明していると思う インタープリタでコードを実行すると、実行している関数の戻り値が常に表示されますが、実行可能なPythonを介して実行すると戻り値は表示されません。 これは異常な動作ではないと思います。 – Kieran

+0

オリジナルの答えを編集して少しの説明を追加しましたが、これはもう役に立ちますか? @Rhymoid – Kieran

関連する問題