このプログラムは、コンソール入力を1行ずつエコーすると思いました:
import os, sys
for line in sys.stdin:
print line
残念ながら、EOF ( Ctrl+ D) を待ってから出力を生成します。行ごとに出力を取得するには、プログラムをどのように変更すればよいですか?
Python 2.x:
for line in iter(sys.stdin.readline, ''):
print line,
Python 3.x:
for line in iter(sys.stdin.readline, ''):
print(line, end='')
2 つの引数を使用したドキュメントを参照してください。iter()
実際には、このようなファイルからの読み取りが例の 1 つとして含まれています。
Python 2.x:
while True:
sys.stdout.write(sys.stdin.readline())
Python 3.x:
while True:
print(sys.stdin.readline(), end = "")
構文を使用するとfor line in file:
、Pythonがバッファリングを管理します。つまり、ループの実行が開始される前に読み取られる行数を制御することはできません。を呼び出すとfile.readline()
、ファイルから1行が読み取られ、ループが1回実行されます。