標準入力からの読み込みはどうするのですか?

コード・ゴルフ]1の課題をいくつかやろうとしていますが、どれも入力を stdin から取得する必要があります。これをPythonで実現するにはどうしたらよいでしょうか?

fileinput`]1モジュールを使うことができます。

import fileinput

for line in fileinput.input():
    pass

fileinput は、コマンドライン引数で与えられたファイル名で指定された入力、または引数が与えられていない場合は標準入力のすべての行をループします。

注意: line には末尾に改行が含まれます。改行を削除するには line.rstrip() を使用してください。

解説 (1)

方法はいくつかあります。

  • sys.stdinはファイルのようなオブジェクトで、すべてを読みたい場合には read関数やreadlines関数を、すべてを読んで自動的に改行で分割したい場合にはimport sysを呼び出すことができます。(これを動作させるには import sys が必要です。)

  • ユーザーに入力を促したい場合は、Python 2.X では raw_input を、Python 3 では input を使用してください。

  • 実際に単にコマンドラインオプションを読みたい場合は、sys.argvリストでアクセスできます。

I/O in Pythonに関するWikibookの記事]3も参考になるでしょう。

解説 (0)

これはLearning Pythonからの引用です。

import sys
data = sys.stdin.readlines()
print "Counted", len(data), "lines."

Unixでは、次のようにしてテストすることができます。

% cat countlines.py | python countlines.py 
Counted 3 lines.

WindowsやDOSでは、次のようにします。

C:\> type countlines.py | python countlines.py 
Counted 3 lines.
解説 (3)