2017-05-29 4 views
1

私はPythonには新しく、対話シェルに取り組んでいます。私はpythonの標準ライブラリを試していたし、stdin.read()が文字列引数を返すことをドキュメントから読みました。 しかし、入力値を格納する変数を出力すると、ランダムな文字が表示されます。それが意味することに混乱するsys.stdin.read()はPythonで正確に何を返しますか?

>>>input=sys.stdin.read() 
>>>1 2 
>>>sys.stdout.write(input) 
>>>1 2 
    4 

4は何を表していますか?なぜそれが表示されます。代わりにprint(input)を実行します。それはうまく動作し、"1 2"を返します。ちょうどガベージ値ですか、それともいくつかの意味がありますか?

さらに入力を分割してリストを取得するとき。 2つの要素、['1', '2']のみを返します。予想通り。私はなぜ4が表示され、それが一定でないのか不思議です。

>>>input=sys.stdin.read() 
>>>1 2 3 4 
>>>sys.stdout.write(input) 
>>>1 2 3 4 
    8 

印刷と分割が正常に機能します。

答えて

0

4または8は、sys.stdout.writeによって返されます。これは、何文字(またはバイト)が印刷されたかを意味します。 documentation on sys.stdin and sys.stdout状態と同様に

これらのストリームは、open()関数によって返されたもののような通常のテキストファイルです。

は、基礎となる生ストリームに、を所定のバイトのようなオブジェクト、Bを書き込み、書き込まれたバイト数を返す:

及びこれらのストリームはwrite方法を有しています。

あなたは、単にそれを無視することができますか、それは本当に困る場合は、単に変数に復帰キャッチ:

>>> bytes_written = sys.stdout.write(input) 
1 2 

>>> bytes_written 
4 
関連する問題