Python3で標準入力から入力を読む方法はいくつかありますが、組み込み関数のopen
を使って、open(0)
とすると標準入力に対応するファイルオブジェクトを取得できます。
利用例としては以下のようになります。
stdin = open(0)
for line in stdin:
do_something(line)
open
の引数を0
にすると、なぜ標準入力になるのでしょうか? ドキュメントを注意深く読むと以下のように記述されています。
file は path-like object で、開くファイルの (絶対または現在のワーキングディレクトリに対する相対) パス名を与えるものか、または、ラップするファイルの整数のファイルディスクリプタです。
open
の引数としてはファイルパスだけでなく、ファイルディスクリプタを示す整数を指定することもできます。標準入力のファイルディスクリプタは0ですから、open(0)
とすると、標準入力に対応するファイルオブジェクトが取得できるわけです。
なおsys.stdin
も標準入力のファイルオブジェクトです。つまりopen(0)
の戻り値とsys.stdin
は実質的には同じものになるといえます。sys.stdin
のほうが、標準入力を利用することが明確でわかりやすいのですが、import sys
とする必要があって、タイプ数が増えます。コードゴルフや競技プログラミングなどではopen(0)
のほうがお得かもしれません。