# 7.3 `select` -- I/O 処理の完了を待機する

このモジュールでは、ほとんどのオペレーティングシステムで利用可能な `select()` および `poll()` 関数へのアクセス 機構を提供します。Windows の上ではソケットに対してしか動作しないので 注意してください; その他のオペレーティングシステムでは、他のファイル 形式でも (特に Unixではパイプにも) 動作します。通常のファイルに 対して適用し、最後にファイルを読み出した時から内容が増えているかを 決定するために使うことはできません。

このモジュールでは以下の内容を定義しています:

exception `error`
  エラーが発生したときに送出される例外です。エラーに付属する 値は、 `errno` からとったエラーコードを表す数値とその エラーコードに対応する文字列からなるペアで、C 関数の `perror()` が出力するものと同様です。

`poll`( | )

  (全てのオペレーティングシステムでサポートされているわけでは ありません。) ポーリングオブジェクトを返します。このオブジェクトは ファイル記述子を登録したり登録解除したりすることができ、 ファイル記述子に対する I/O イベント発生をポーリングすることが できます; ポーリングオブジェクトが提供しているメソッドについては 下記の 7.3.1 節を参照してください。

`select`( | iwtd, owtd, ewtd[, timeout])

  Unix の `select()` システムコールに対する直接的な インタフェースです。最初の 3 つの引数は `待機可能なオブジェクト' からなるリストです: ファイル記述子を表す整数値、または 引数を持たず、整数を返すメソッド `fileno()` を持つ オブジェクトです。待機可能なオブジェクトの 3 つのリストはそれぞれ 入力、出力、そして `例外状態' に対応します。いずれかに空のリストを 指定してもかまいませんが、3 つ全てを空のリストにしてもよいかどうか はプラットフォームに依存します (Unix では動作し、Windows では 動作しないことが知られています)。オプションの timeout 引数 にはタイムアウトまでの秒数を浮動小数点数型で指定します。 timeout 引数が省略された場合、関数は少なくとも一つのファイル 記述子が何らかの準備完了状態になるまでブロックします。 タイムアウト値ゼロは、ポーリングを行いブロックしないことを示します。

  戻り値は準備完了状態のオブジェクトからなる 3 つのリストです: 従ってこのリストはそれぞれ関数の最初の 3 つの引数のサブセットに なります。ファイル記述子のいずれも準備完了にならないままタイムアウト した場合、3 つの空のリストが返されます。

  リストの中に含めることのできるオブジェクトは Python ファイル オブジェクト (すなわち `sys.stdin`, あるいは `open()` や `os.popen()` が返すオブジェクト)、`socket.socket()` が返すソケットオブジェクト です。 wrapper クラスを自分で定義することもできます。この場合、 適切な (単なる乱数ではなく本当のファイル記述子を返す)`fileno()` メソッドを持つ必要があります 注意: `select` はWindows のファイルオブジェクトを受理 しませんが、ソケットは受理します 。 Windows では、 背後の `select()` 関数は WinSock ライブラリで提供されて おり、WinSock によって生成されたものではないファイル記述子を扱う ことができないのです。