# 15.1. `os` --- 雑多なオペレーティングシステムインタフェース

このモジュールは、 OS 依存の機能を利用するポータブルな方法を提供します。単純なファイルの読み書きについては、 `open()` を参照してください。パス操作については、 `os.path` モジュールを参照してください。コマンドラインに与えられたすべてのファイルから行を読み込んでいくには、 `fileinput` モジュールを参照してください。一時ファイルや一時ディレクトリの作成については、 `tempfile` モジュールを参照してください。高レベルなファイルとディレクトリの操作については、 `shutil` モジュールを参照してください。

利用可能性に関する注意 :

- Python の、すべての OS 依存モジュールの設計方針は、可能な限り同一のインタフェースで同一の機能を利用できるようにする、というものです。例えば、 `os.stat(path)` は path に関する stat 情報を、 (POSIX を元にした ) 同じフォーマットで返します。

- 特定のオペレーティングシステム固有の拡張も `os` を介して利用することができますが、これらの利用はもちろん、可搬性を脅かします。

- 「利用できる環境 : Unix 」の意味はこの関数が Unix システムにあることが多いということです。このことは特定の OS における存在を主張するものではありません。

- 特に記述がない場合、「利用できる環境 : Unix 」と書かれている関数は、 Unix をコアにしている Mac OS X でも利用することができます。

注釈

このモジュール内のすべての関数は、間違った、あるいはアクセス出来ないファイル名やファイルパス、その他型が合っていても OS が受理しない引数に対して、 `OSError` を送出します。

exception `os.``error`

  組み込みの `OSError` 例外に対するエイリアスです。

`os.``name`

  import されているオペレーティング・システム依存モジュールの名前です。現在次の名前が登録されています : `'posix'`, `'nt'`, `'os2'`, `'ce'`, `'java'`, `'riscos'`.

  参考

  `sys.platform` はより細かな粒度を持っています。 `os.uname()` はシステム依存のバージョン情報を提供します。

  `platform` モジュールはシステムの詳細な識別情報をチェックする機能を提供しています。

## 15.1.1. プロセスのパラメーター

これらの関数とデータアイテムは、現在のプロセスおよびユーザーに対する情報提供および操作のための機能を提供しています。

`os.``environ`

  マップ型 オブジェクトは文字の環境を表します。例えば、 `environ['HOME']` はホームディレクトリのパス名であり、 C における `getenv("HOME")` と等価です。

  このマップ型の内容は、 `os` モジュールの最初の import の時点、通常は Python の起動時に `site.py` が処理される中で取り込まれます。それ以後に変更された環境変数は `os.environ` を直接変更しない限り `os.environ` には反映されません。

  プラットフォーム上で `putenv()` がサポートされている場合、このマップ型オブジェクトは環境変数に対する変更に使うこともできます。 `putenv()` はマップ型オブジェクトが修正される時に、自動的に呼ばれることになります。

  注釈

  `putenv()` を直接呼び出しても `os.environ` の内容は変わらないので、 `os.environ` を直接変更する方がベターです。

  注釈

  FreeBSD と Mac OS X を含む一部のプラットフォームでは、 `environ` の値を変更するとメモリリークの原因になる場合があります。システムの `putenv()` に関するドキュメントを参照してください。

  `putenv()` が提供されていない場合、このマップ型オブジェクトに変更を加えたコピーを適切なプロセス生成機能に渡すことで、生成された子プロセスが変更された環境変数を利用するようにできます。

  プラットフォームが `unsetenv()` 関数をサポートしている場合、このマップ型オブジェクトからアイテムを削除することで環境変数を消すことができます。 `unsetenv()` は `os.environ` からアイテムが取り除かれた時に自動的に呼ばれます。 `pop()` または `clear()` が呼ばれた時も同様です。

  バージョン 2.6 で変更: `os.environ.clear()` か `os.environ.pop()` を呼び出した時も、 (delete した時と同様に ) 環境変数を削除するようになりました。

`os.``chdir`(path)
`os.``fchdir`(fd)
`os.``getcwd`()

  これらの関数は、 ファイルとディレクトリ 節で説明されています。

`os.``ctermid`()

  プロセスの制御端末に対応するファイル名を返します。

  利用できる環境 : Unix 。

`os.``getegid`()

  現在のプロセスの実効グループ id を返します。この id は現在のプロセスで実行されているファイルの "set id" ビットに対応します。

  利用できる環境 : Unix 。

`os.``geteuid`()

  現在のプロセスの実効ユーザー id を返します。

  利用できる環境 : Unix 。

`os.``getgid`()

  現在のプロセスの実グループ id を返します。

  利用できる環境 : Unix 。

`os.``getgroups`()

  現在のプロセスに関連づけられた従属グループ id のリストを返します。

  利用できる環境 : Unix 。

  注釈

  Mac OS X では `getgroups()` の挙動は他の Unix プラットフォームとはいくぶん異なります。 Python の Deployment Target が `10.5` 以前でビルドされている場合、 `getgroups()` は現在のユーザープロセスに関連付けられている実効グループ id を返します ; このリストはシステムで定義されたエントリ数 ( 通常は 16) に制限され、適切な特権があれば `setgroups()` の呼び出しによって変更される場合があります。 Deployment Target が `10.5` より新しい場合、 `getgroups()` はプロセスの実効ユーザー id に関連付けられたユーザーの現在のグループアクセスリストを返します ; グループアクセスリストはプロセスのライフタイムで変更される可能性があり、 `setgroups()` の呼び出しの影響を受けず、長さ 16 の制限を受けません。 Deployment Target の値 `MACOSX_DEPLOYMENT_TARGET` は、 `sysconfig.get_config_var()` で取得することができます。

`os.``initgroups`(username, gid)

  システムの initgroups() を呼び出し、指定された username がメンバーである全グループと gid で指定されたグループでグループアクセスリストを初期化します。

  利用できる環境 : Unix 。

  バージョン 2.7 で追加.

`os.``getlogin`()

  現在のプロセスの制御端末にログインしているユーザ名を返します。ほとんどの場合、ユーザが誰かを知りたいときには環境変数 `LOGNAME` を、プロセスの実ユーザ ID のログイン名を知りたいときには `pwd.getpwuid(os.getuid())[0]` を使うほうが便利です。

  利用できる環境 : Unix 。

`os.``getpgid`(pid)

  プロセス id pid のプロセスのプロセスグループ id を返します。もし pid が 0 ならば、現在のプロセスのプロセスグループ id を返します。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``getpgrp`()

  現在のプロセスグループの id を返します。

  利用できる環境 : Unix 。

`os.``getpid`()

  現在のプロセス id を返します。

  利用できる環境 : Unix 、 Windows 。

`os.``getppid`()

  親プロセスの id を返します。

  利用できる環境 : Unix 。

`os.``getresuid`()

  現在のプロセスの実ユーザー id 、実効ユーザー id 、および保存ユーザー id を示す、 (ruid, euid, suid) のタプルを返します。

  利用できる環境 : Unix 。

  バージョン 2.7 で追加.

`os.``getresgid`()

  現在のプロセスの実グループ id 、実効グループ id 、および保存グループ id を示す、 (rgid, egid, sgid) のタプルを返します。

  利用できる環境 : Unix 。

  バージョン 2.7 で追加.

`os.``getuid`()

  現在のプロセスの実ユーザー id を返します。

  利用できる環境 : Unix 。

`os.``getenv`(varname[, value])

  環境変数 varname が存在する場合にはその値を返し、存在しない場合には value を返します。 value のデフォルト値は `None` です。

  利用できる環境 : 主な Unix 互換環境、 Windows 。

`os.``putenv`(varname, value)

  varname と名づけられた環境変数の値を文字列 value に設定します。このような環境変数への変更は、 `os.system()`, `popen()` , `fork()` および `execv()` により起動された子プロセスに影響します。

  利用できる環境 : 主な Unix 互換環境、 Windows 。

  注釈

  FreeBSD と Mac OS X を含む一部のプラットフォームでは、 `environ` の値を変更するとメモリリークの原因になる場合があります。システムの putenv に関するドキュメントを参照してください。

  `putenv()` がサポートされている場合、 `os.environ` のアイテムに対する代入を行うと自動的に `putenv()` が呼び出されます ; 直接 `putenv()` を呼び出した場合 `os.environ` は更新されないため、実際には `os.environ` のアイテムに代入する方が望ましい操作です。

`os.``setegid`(egid)

  現在のプロセスに実効グループ id をセットします。

  利用できる環境 : Unix 。

`os.``seteuid`(euid)

  現在のプロセスに実効ユーザー id をセットします。

  利用できる環境 : Unix 。

`os.``setgid`(gid)

  現在のプロセスにグループ id をセットします。

  利用できる環境 : Unix 。

`os.``setgroups`(groups)

  現在のグループに関連付けられた従属グループ id のリストを groups に設定します。 groups はシーケンス型でなくてはならず、各要素はグループを特定する整数でなくてはなりません。通常、この操作はスーパユーザーしか利用できません。

  利用できる環境 : Unix 。

  バージョン 2.2 で追加.

  注釈

  Mac OS X では、 groups の長さはシステムで定義された実効グループ id の最大数 ( 通常は 16) を超えない場合があります。 setgroups() 呼び出しで設定されたものと同じグループリストが返されないケースについては、 `getgroups()` のドキュメントを参照してください。

`os.``setpgrp`()

  システムコール `setpgrp()` か `setpgrp(0, 0)` のどちらか(実装されているもの)を呼び出します。機能については UNIX マニュアルを参照して下さい。

  利用できる環境 : Unix 。

`os.``setpgid`(pid, pgrp)

  システムコール `setpgid()` を呼び出してプロセス id pid のプロセスのプロセスグループ id を pgrp に設定します。この動作に関しては Unix のマニュアルを参照してください。

  利用できる環境 : Unix 。

`os.``setregid`(rgid, egid)

  現在のプロセスの実グループ id および実効グループ id を設定します。

  利用できる環境 : Unix 。

`os.``setresgid`(rgid, egid, sgid)

  現在のプロセスの、実グループ id 、実効グループ id 、および保存グループ id を設定します。

  利用できる環境 : Unix 。

  バージョン 2.7 で追加.

`os.``setresuid`(ruid, euid, suid)

  現在のプロセスの実ユーザー id 、実効ユーザー id 、および保存ユーザー id を設定します。

  利用できる環境 : Unix 。

  バージョン 2.7 で追加.

`os.``setreuid`(ruid, euid)

  現在のプロセスの実ユーザー id および実効ユーザー id を設定します。

  利用できる環境 : Unix 。

`os.``getsid`(pid)

  `getsid()` システムコールを呼び出します。機能については Unix のマニュアルを参照してください。

  利用できる環境 : Unix 。

  バージョン 2.4 で追加.

`os.``setsid`()

  `setsid()` システムコールを呼び出します。機能については Unix のマニュアルを参照してください。

  利用できる環境 : Unix 。

`os.``setuid`(uid)

  現在のプロセスのユーザー id を設定します。

  利用できる環境 : Unix 。

`os.``strerror`(code)

  エラーコード code に対応するエラーメッセージを返します。未知のエラーコードの対して `strerror()` が `NULL` を返すプラットフォームでは、 `ValueError` が送出されます。

  利用できる環境 : Unix 、 Windows 。

`os.``umask`(mask)

  現在の数値 umask を設定し、以前の umask 値を返します。

  利用できる環境 : Unix 、 Windows 。

`os.``uname`()

  現在のオペレーティングシステムを特定する情報の入った 5 要素のタプルを返します。このタプルには 5 つの文字列 : `(sysname, nodename, release, version, machine)` が入っています。システムによっては、ノード名を 8 文字、または先頭の要素だけに切り詰めます ; ホスト名を取得する方法としては、 `socket.gethostname()` を使う方がよいでしょう、あるいは `socket.gethostbyaddr(socket.gethostname())` でもかまいません。

  利用できる環境 : Unix 互換環境。

`os.``unsetenv`(varname)

  varname という名前の環境変数を取り消します。このような環境の変化は `os.system()`, `popen()` または `fork()` と `execv()` で開始されるサブプロセスに影響を与えます。

  `unsetenv()` がサポートされている場合、 `os.environ` のアイテムの削除を行うと自動的に `unsetenv()` が呼び出されます。直接 `unsetenv()` を呼び出した場合 `os.environ` は更新されないため、実際には `os.environ` のアイテムを削除する方が望ましい操作です。

  利用できる環境 : 主な Unix 互換環境、 Windows 。

## 15.1.2. ファイルオブジェクトの生成

以下の関数は新しいファイルオブジェクトを作成します。 (`open()` も参照してください )

`os.``fdopen`(fd[, mode[, bufsize]])

  ファイル記述子 fd に接続している、開かれたファイルオブジェクトを返します。引数 mode および bufsize は、組み込み関数 `open()` における対応する引数と同じ意味を持ちます。 `fdopen()` が例外を起こした場合は、 fd はそのままにされます(クローズされません)。

  利用できる環境 : Unix 、 Windows 。

  バージョン 2.3 で変更: 引数 mode は、指定されるならば、 `'r'`, `'w'`, `'a'` のいずれかの文字で始まらなければなりません。そうでなければ `ValueError` が送出されます .

  バージョン 2.5 で変更: Unix では、引数 mode が `'a'` で始まる時には O_APPEND フラグがファイル記述子に設定されます。 ( ほとんどのプラットフォームで `fdopen()` 実装が既に行なっていることです ).

`os.``popen`(command[, mode[, bufsize]])

  command への、または command からのパイプ入出力を開きます。戻り値はパイプに接続されている開かれたファイルオブジェクトで、 mode が `'r'` ( 標準の設定です ) または `'w'` かによって読み出しまたは書き込みを行うことができます。引数 bufsize は、組み込み関数 `open()` における対応する引数と同じ意味を持ちます。 command の終了ステータス (`wait()` で指定された書式でコード化されています ) は、 `close()` メソッドの戻り値として取得することができます。例外は終了ステータスがゼロ ( すなわちエラーなしで終了 ) の場合で、このときには `None` を返します。

  利用できる環境 : Unix 、 Windows 。

  バージョン 2.6 で非推奨: この関数は廃止予定です。 `subprocess` モジュールを使用してください。特に 古い関数を subprocess モジュールで置き換える セクションをチェックしてください。

  バージョン 2.0 で変更: この関数は、 Python の初期のバージョンでは、 Windows 環境下で信頼できない動作をしていました。これは Windows に付属して提供されるライブラリの `_popen()` 関数を利用したことによるものです。新しいバージョンの Python では、 Windows 付属のライブラリにある壊れた実装を利用しません。

`os.``tmpfile`()

  更新モード (`w+b`) で開かれた新しいファイルオブジェクトを返します。このファイルはディレクトリエントリ登録に関連付けられておらず、このファイルに対するファイル記述子がなくなると自動的に削除されます。

  利用できる環境 : Unix 、 Windows 。

幾つかの少し異なった方法で子プロセスを作成するために、幾つかの `popen*()` 関数が提供されています。

バージョン 2.6 で非推奨: 全ての `popen*()` 関数は撤廃されました。代わりに `subprocess` モジュールを利用してください。

`popen*()` の変種はどれも、 bufsize が指定されている場合には I/O パイプのバッファサイズを表します。 mode を指定する場合には、文字列 `'b'` または `'t'` でなければなりません ; これは、 Windows でファイルをバイナリモードで開くかテキストモードで開くかを決めるために必要です。 mode の標準の設定値は `'t'` です。

また Unix ではこれらの変種はいずれも cmd をシーケンスにできます。その場合、引数はシェルの介在なしに直接 (`os.spawnv()` のように ) 渡されます。 cmd が文字列の場合、引数は ( `os.system()` のように ) シェルに渡されます。

以下のメソッドは子プロセスから終了ステータスを取得できるようにはしていません。入出力ストリームを制御し、かつ終了コードの取得も行える唯一の方法は、 `subprocess` モジュールを利用する事です。以下のメソッドは Unix でのみ利用可能です。

これらの関数の利用に関係して起きうるデッドロック状態についての議論は、 フロー制御の問題 節を参照してください。

`os.``popen2`(cmd[, mode[, bufsize]])

  cmd を子プロセスとして実行します。ファイル・オブジェクト `(child_stdin, child_stdout)` を返します。

  バージョン 2.6 で非推奨: この関数は廃止予定です。 `subprocess` モジュールを使用してください。特に 古い関数を subprocess モジュールで置き換える セクションをチェックしてください。

  利用できる環境 : Unix 、 Windows 。

  バージョン 2.0 で追加.

`os.``popen3`(cmd[, mode[, bufsize]])

  cmd を子プロセスとして実行します。ファイルオブジェクト `(child_stdin, child_stdout, child_stderr)` を返します。

  バージョン 2.6 で非推奨: この関数は廃止予定です。 `subprocess` モジュールを使用してください。特に 古い関数を subprocess モジュールで置き換える セクションをチェックしてください。

  利用できる環境 : Unix 、 Windows 。

  バージョン 2.0 で追加.

`os.``popen4`(cmd[, mode[, bufsize]])

  cmd を子プロセスとして実行します。ファイルオブジェクト `(child_stdin, child_stdout_and_stderr)` を返します。

  バージョン 2.6 で非推奨: この関数は廃止予定です。 `subprocess` モジュールを使用してください。特に 古い関数を subprocess モジュールで置き換える セクションをチェックしてください。

  利用できる環境 : Unix 、 Windows 。

  バージョン 2.0 で追加.

(`child_stdin, child_stdout, および child_stderr` は子プロセスの視点で名付けられているので注意してください。すなわち、 child_stdin とは子プロセスの標準入力を意味します。 )

この機能は `popen2` モジュール内の同じ名前の関数を使っても実現できますが、これらの関数の戻り値は異なる順序を持っています。

## 15.1.3. ファイル記述子の操作

これらの関数は、ファイル記述子を使って参照されている I/O ストリームを操作します。

ファイル記述子とは現在のプロセスで開かれたファイルに対応する小さな整数です。例えば、標準入力のファイル記述子は常に 0 で、標準出力は 1 、標準エラーは 2 です。プロセスから開かれたその他のファイルには 3 、 4 、 5 、などが割り振られます。「ファイル記述子」という名称は少し誤解を与えるものかもしれませんが、 Unix プラットフォームにおいて、ソケットやパイプもファイル記述子によって参照されます。

ファイルオブジェクトに紐付けられたファイル記述子は `fileno()` メソッドによって取得可能です。ただし、ファイル記述子を直接使うとファイルオブジェクトのメソッドは経由しませんので、内部でバッファするかどうかといったファイルオブジェクトの都合は無視されます。

`os.``close`(fd)

  ファイル記述子 fd をクローズします。

  利用できる環境 : Unix 、 Windows 。

  注釈

  この関数は低水準の I/O 向けのもので、 `os.open()` や `pipe()` が返すファイル記述子に対して使用しなければなりません。組み込み関数 `open()` や `popen()` 、 `fdopen()` が返す " ファイルオブジェクト " を閉じるには、オブジェクトの `close()` メソッドを使用してください。

`os.``closerange`(fd_low, fd_high)

  fd_low ( を含む ) から fd_high ( 含まない ) までの全てのファイル記述子を、エラーを無視しながら閉じます。次のコードと等価です

      for fd in xrange(fd_low, fd_high):
          try:
              os.close(fd)
          except OSError:
              pass

  利用できる環境 : Unix 、 Windows 。

  バージョン 2.6 で追加.

`os.``dup`(fd)

  ファイル記述子 fd の複製を返します。

  利用できる環境 : Unix 、 Windows 。

`os.``dup2`(fd, fd2)

  ファイル記述子を fd から fd2 に複製し、必要なら後者の記述子を前もって閉じておきます。

  利用できる環境 : Unix 、 Windows 。

`os.``fchmod`(fd, mode)

  fd で指定されたファイルのモードを mode に変更します。 mode に指定できる値については、 `chmod()` のドキュメントを参照してください。

  利用できる環境 : Unix 。

  バージョン 2.6 で追加.

`os.``fchown`(fd, uid, gid)

  fd で指定されたファイルの owner id と group id を、 uid と gid に変更します。どちらかの id を変更しない場合は、 -1 を渡してください。

  利用できる環境 : Unix 。

  バージョン 2.6 で追加.

`os.``fdatasync`(fd)

  ファイル記述子 fd を持つファイルのディスクへの書き込みを強制します。メタデータの更新は強制しません。

  利用できる環境 : Unix 。

  注釈

  この関数は MacOS では利用できません。

`os.``fpathconf`(fd, name)

  オープンしているファイルに関連するシステム設定情報を返します。 name には取得したい設定名を指定します ; これは定義済みのシステム値名の文字列で、多くの標準 (POSIX.1 、 Unix 95 、 Unix 98 その他 ) で定義されています。プラットフォームによっては別の名前も定義されています。ホストオペレーティングシステムの関知する名前は `pathconf_names` 辞書で与えられています。このマップ型オブジェクトに入っていない設定変数については、 name に整数を渡してもかまいません。

  もし name が文字列でかつ不明である場合、 `ValueError` を送出します。 name の指定値がホストシステムでサポートされておらず、 `pathconf_names` にも入っていない場合、 `errno.EINVAL` をエラー番号として `OSError` を送出します。

  利用できる環境 : Unix 。

`os.``fstat`(fd)

  `stat()` のようにファイル記述子 fd の状態を返します。

  利用できる環境 : Unix 、 Windows 。

`os.``fstatvfs`(fd)

  `statvfs()` のように、ファイル記述子 fd に関連づけられたファイルが入っているファイルシステムに関する情報を返します。

  利用できる環境 : Unix 。

`os.``fsync`(fd)

  ファイル記述子 fd を持つファイルのディスクへの書き込みを強制します。 Unix では、ネイティブの `fsync()` 関数を、 Windows では `_commit()` 関数を呼び出します。

  Python のファイルオブジェクト f を使う場合、 f の内部バッファを確実にディスクに書き込むために、まず `f.flush()` を実行し、それから `os.fsync(f.fileno())` してください。

  利用できる環境 : Unix, Windows (2.2.3 以降 )

`os.``ftruncate`(fd, length)

  ファイル記述子 fd に対応するファイルを、サイズが最大で length バイトになるように切り詰めます。

  利用できる環境 : Unix 。

`os.``isatty`(fd)

  ファイル記述子 fd がオープンされていて、 tty ( のような ) デバイスに接続されている場合、 `True` を返します。そうでない場合は `False` を返します。

`os.``lseek`(fd, pos, how)

  ファイル記述子 fd の現在の位置を pos に設定します。 pos の意味は how で修飾されます : ファイルの先頭からの相対には `SEEK_SET` か `0` を設定します ; 現在の位置からの相対には `SEEK_CUR` か `1` を設定します ; ファイルの末尾からの相対には `SEEK_END` か `2` を設定します。戻り値は開始位置からの、バイトで数えた新しいカーソル位置です。

  利用できる環境 : Unix 、 Windows 。

`os.``SEEK_SET`
`os.``SEEK_CUR`
`os.``SEEK_END`

  `lseek()` 関数に渡すパラメーター。値は順に 0, 1, 2 です。

  利用出来る環境 : Windows, Unix

  バージョン 2.5 で追加.

`os.``open`(file, flags[, mode])

  ファイル file を開き、 flag に従って様々なフラグを設定し、可能なら mode に従ってファイルモードを設定します。 mode の標準の設定値は `0777` (8 進表現 ) で、先に現在の umask を使ってマスクを掛けます。新たに開かれたファイルのファイル記述子を返します。

  フラグとファイルモードの値についての詳細は C ランタイムのドキュメントを参照してください ; (`O_RDONLY` や `O_WRONLY` のような ) フラグ定数はこのモジュールでも定義されています (open() フラグ定数 を参照してください ) 。特に、 Windows ではバイナリモードでファイルを開く時に `O_BINARY` を加える必要があります。

  利用できる環境 : Unix 、 Windows 。

  注釈

  この関数は低レベルの I/O のためのものです。通常の利用では、 `read()` や `write()` ( やその他多くの ) メソッドを持つ「ファイルオブジェクト」を返す、組み込み関数 `open()` を使ってください。ファイル記述子を「ファイルオブジェクト」でラップするには `fdopen()` を使ってください。

`os.``openpty`()

  新しい擬似端末のペアを開きます。ファイル記述子のペア `(master, slave)` を返し、それぞれ pty および tty を表します。 ( 少しだけ ) より可搬性のあるアプローチとしては、 `pty` モジュールを使用してください。

  利用できる環境 : 一部の Unix 互換環境。

`os.``pipe`()

  パイプを作成します。ファイル記述子のペア `(r, w)` を返し、それぞれ読み込み、書き出し用に使うことができます。

  利用できる環境 : Unix 、 Windows 。

`os.``read`(fd, n)

  ファイル記述子 fd から最大で n バイト読み出します。読み出されたバイト列の入った文字列を返します。 fd が参照しているファイルの終端に達した場合、空の文字列が返されます。

  利用できる環境 : Unix 、 Windows 。

  注釈

  この関数は低水準の I/O 向けのもので、 `os.open()` や `pipe()` が返すファイル記述子に対して使用されなければなりません。組み込み関数 `open()` や `popen()` 、 `fdopen()` 、あるいは `sys.stdin` が返す " ファイルオブジェクト " を読み込むには、オブジェクトの `read()` か `readline()` メソッドを使用してください。

`os.``tcgetpgrp`(fd)

  fd (`os.open()` が返すオープンしたファイル記述子 ) で与えられる端末に関連付けられたプロセスグループを返します。

  利用できる環境 : Unix 。

`os.``tcsetpgrp`(fd, pg)

  fd (`os.open()` が返すオープンしたファイル記述子 ) で与えられる端末に関連付けられたプロセスグループを pg に設定します。

  利用できる環境 : Unix 。

`os.``ttyname`(fd)

  ファイル記述子 fd に関連付けられている端末デバイスを特定する文字列を返します。 fd が端末に関連付けられていない場合、例外が送出されます。

  利用できる環境 : Unix 。

`os.``write`(fd, str)

  ファイル記述子 fd に文字列 str を書き込みます。実際に書き込まれたバイト数を返します。

  利用できる環境 : Unix 、 Windows 。

  注釈

  この関数は低水準の I/O 向けのもので、 `os.open()` や `pipe()` が返すファイル記述子に対して使用しなければなりません。組み込み関数 `open()` や `popen()` 、 `fdopen()` 、あるいは `sys.stdout` や `sys.stderr` が返す " ファイルオブジェクト " に書き込むには、オブジェクトの `write()` メソッドを使用してください。

### 15.1.3.1. `open()` フラグ定数

以下の定数は `open()` 関数の flags 引数に利用します。これらの定数は、ビット単位に OR 演算子 `|` で組み合わせることができます。一部、すべてのプラットフォームでは使用できない定数があります。利用可能かどうかや使い方については、 Unix では open(2) 、 Windows では MSDN を参照してください。

`os.``O_RDONLY`
`os.``O_WRONLY`
`os.``O_RDWR`
`os.``O_APPEND`
`os.``O_CREAT`
`os.``O_EXCL`
`os.``O_TRUNC`

  上記の定数は Unix および Windows で利用可能です。

`os.``O_DSYNC`
`os.``O_RSYNC`
`os.``O_SYNC`
`os.``O_NDELAY`
`os.``O_NONBLOCK`
`os.``O_NOCTTY`

  上記の定数は Unix でのみ利用可能です。

`os.``O_BINARY`
`os.``O_NOINHERIT`
`os.``O_SHORT_LIVED`
`os.``O_TEMPORARY`
`os.``O_RANDOM`
`os.``O_SEQUENTIAL`
`os.``O_TEXT`

  上記の定数は Windows でのみ利用可能です。

`os.``O_ASYNC`
`os.``O_DIRECT`
`os.``O_DIRECTORY`
`os.``O_NOFOLLOW`
`os.``O_NOATIME`
`os.``O_SHLOCK`
`os.``O_EXLOCK`

  上記の定数は拡張仕様であり、Cライブラリで定義されていない場合は利用できません。

## 15.1.4. ファイルとディレクトリ

`os.``access`(path, mode)

  実 uid/gid を使って path に対するアクセスが可能か調べます。ほとんどのオペレーティングシステムは実効 uid/gid を使うため、このルーチンは suid/sgid 環境において、プログラムを起動したユーザーが path に対するアクセス権をもっているかを調べるために使われます。 path が存在するかどうかを調べるには mode を `F_OK` にします。ファイルアクセス権限 ( パーミッション ) を調べるには、 `R_OK`, `W_OK`, `X_OK` から一つまたはそれ以上のフラグを論理和指定でとることもできます。アクセスが許可されている場合 `True` を、そうでない場合 `False` を返します。詳細は access(2) の Unix マニュアルページを参照してください。

  利用できる環境 : Unix 、 Windows 。

  注釈

  ユーザーが、例えばファイルを開く権限を持っているかどうかを調べるために実際に `open()` を行う前に `access()` を使用することはセキュリティホールの原因になります。なぜなら、調べた時点とオープンした時点との時間差を利用してそのユーザーがファイルを不当に操作してしまうかもしれないからです。その場合は EAFP テクニックを利用するのが望ましいやり方です。例えば

      if os.access("myfile", os.R_OK):
          with open("myfile") as fp:
              return fp.read()
      return "some default data"

  このコードは次のように書いたほうが良いです

      try:
          fp = open("myfile")
      except IOError as e:
          if e.errno == errno.EACCES:
              return "some default data"
          # Not a permission error.
          raise
      else:
          with fp:
              return fp.read()

  注釈

  I/O 操作は `access()` が成功を示した時でも失敗することがあります。特にネットワークファイルシステムが通常の POSIX のパーミッションビットモデルをはみ出すアクセス権限操作を備える場合にはそのようなことが起こりえます。

`os.``F_OK`

  `access()` の mode に渡すための値で、 path が存在するかどうかを調べます。

`os.``R_OK`

  `access()` の mode に渡すための値で、 path が読み出し可能かどうかを調べます。

`os.``W_OK`

  `access()` の mode に渡すための値で、 path が書き込み可能かどうかを調べます。

`os.``X_OK`

  `access()` の mode に渡すための値で、 path が実行可能かどうかを調べます。

`os.``chdir`(path)

  現在の作業ディレクトリを path に設定します。

  利用できる環境 : Unix 、 Windows 。

`os.``fchdir`(fd)

  現在の作業ディレクトリをファイル記述子 fd が表すディレクトリに変更します。記述子はオープンしているファイルではなく、オープンしたディレクトリを参照していなければなりません。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``getcwd`()

  現在の作業ディレクトリを表す文字列を返します。

  利用できる環境 : Unix 、 Windows 。

`os.``getcwdu`()

  現在の作業ディレクトリを表現するユニコードオブジェクトを返します。

  利用できる環境 : Unix 、 Windows 。

  バージョン 2.3 で追加.

`os.``chflags`(path, flags)

  path のフラグを flags に変更します。 flags は、以下の値 (`stat` モジュールで定義されているもの ) をビット単位の論理和で組み合わせることができます :

  - `stat.UF_NODUMP`

  - `stat.UF_IMMUTABLE`

  - `stat.UF_APPEND`

  - `stat.UF_OPAQUE`

  - `stat.UF_NOUNLINK`

  - `stat.UF_COMPRESSED`

  - `stat.UF_HIDDEN`

  - `stat.SF_ARCHIVED`

  - `stat.SF_IMMUTABLE`

  - `stat.SF_APPEND`

  - `stat.SF_NOUNLINK`

  - `stat.SF_SNAPSHOT`

  利用できる環境 : Unix 。

  バージョン 2.6 で追加.

`os.``chroot`(path)

  現在のプロセスに対してルートディレクトリを path に変更します。 利用出来る環境: Unix。

  バージョン 2.2 で追加.

`os.``chmod`(path, mode)

  path のモードを数値 mode に変更します。 mode は、 (`stat` モジュールで定義されている ) 以下の値のいずれかまたはビット単位の論理和で組み合わせた値を取り得ます :

  - `stat.S_ISUID`

  - `stat.S_ISGID`

  - `stat.S_ENFMT`

  - `stat.S_ISVTX`

  - `stat.S_IREAD`

  - `stat.S_IWRITE`

  - `stat.S_IEXEC`

  - `stat.S_IRWXU`

  - `stat.S_IRUSR`

  - `stat.S_IWUSR`

  - `stat.S_IXUSR`

  - `stat.S_IRWXG`

  - `stat.S_IRGRP`

  - `stat.S_IWGRP`

  - `stat.S_IXGRP`

  - `stat.S_IRWXO`

  - `stat.S_IROTH`

  - `stat.S_IWOTH`

  - `stat.S_IXOTH`

  利用できる環境 : Unix 、 Windows 。

  注釈

  Windows でも `chmod()` はサポートされていますが、ファイルの読み込み専用フラグを ( 定数 `S_IWRITE` と `S_IREAD`, または対応する整数値を通して ) 設定できるだけです。他のビットは全て無視されます。

`os.``chown`(path, uid, gid)

  path の所有者 (owner) id とグループ id を、数値 uid および gid に変更します。いずれかの id を変更せずにおくには、その値として -1 をセットします。

  利用できる環境 : Unix 。

`os.``lchflags`(path, flags)

  path のフラグを数値 flags に設定します。 `chflags()` に似ていますが、シンボリックリンクをたどりません。

  利用できる環境 : Unix 。

  バージョン 2.6 で追加.

`os.``lchmod`(path, mode)

  path のモードを数値 mode に変更します。パスがシンボリックリンクの場合はそのリンク先ではなくシンボリックリンクそのものに対して作用します。mode に指定できる値については `chmod()` のドキュメントを参照してください。

  利用できる環境 : Unix 。

  バージョン 2.6 で追加.

`os.``lchown`(path, uid, gid)

  path の所有者 (owner) id とグループ id を、数値 uid および gid に変更します。この関数はシンボリックリンクをたどりません。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``link`(source, link_name)

  source を指しているハードリンク link_name を作成します。

  利用できる環境 : Unix 。

`os.``listdir`(path)

  path で指定されたディレクトリ内のエントリ名が入ったリストを返します。リスト内の順番は不定です。特殊エントリ `'.'` および `'..'` は、それらがディレクトリに入っていてもリストには含められません。

  利用できる環境 : Unix 、 Windows 。

  バージョン 2.3 で変更: Windows NT/2k/XP と Unix では、 path が Unicode オブジェクトの場合、 Unicode オブジェクトのリストが返されます。デコード不可能なファイル名は依然として string オブジェクトになります。

`os.``lstat`(path)

  与えられたパスに対して `lstat()` システムコールと同じ処理を行います。`stat()` と似ていますが、シンボリックリンクをたどりません。シンボリックリンクをサポートしていないプラットフォームでは `stat()` の別名です。

`os.``mkfifo`(path[, mode])

  数値で指定されたモード mode を持つ FIFO ( 名前付きパイプ ) を path に作成します。 mode の標準の値は `0666` (8 進 ) です。現在の umask 値が前もって mode からマスクされます。

  利用できる環境 : Unix 。

  FIFO は通常のファイルのようにアクセスできるパイプです。 FIFO は ( 例えば `os.unlink()` を使って ) 削除されるまで存在しつづけます。一般的に、 FIFO は " クライアント " と " サーバー " 形式のプロセス間でランデブーを行うために使われます : この時、サーバーは FIFO を読み込み用に、クライアントは書き出し用にオープンします。 `mkfifo()` は FIFO をオープンしない --- 単にランデブーポイントを作成するだけ --- なので注意してください。

`os.``mknod`(filename[, mode=0600[, device=0]])

  filename という名前で、ファイルシステム・ノード ( ファイル、デバイス特殊ファイル、または、名前つきパイプ ) を作ります。 mode は、作ろうとするノードの使用権限とタイプを、 `stat.S_IFREG`, `stat.S_IFCHR`, `stat.S_IFBLK`, `stat.S_IFIFO` ( これらの定数は `stat` で使用可能 ) のいずれかと（ビット OR で）組み合わせて指定します。 `S_IFCHR` と `S_IFBLK` を指定すると、 device は新しく作られたデバイス特殊ファイルを ( おそらく `os.makedev()` を使って ) 定義し、指定しなかった場合には無視します。

  バージョン 2.3 で追加.

`os.``major`(device)

  RAW デバイス番号から、デバイスのメジャー番号を取り出します ( 通常 `stat` の `st_dev` か `st_rdev` フィールドです ) 。

  バージョン 2.3 で追加.

`os.``minor`(device)

  RAW デバイス番号から、デバイスのマイナー番号を取り出します ( 通常 `stat` の `st_dev` か `st_rdev` フィールドです ) 。

  バージョン 2.3 で追加.

`os.``makedev`(major, minor)

  メジャーおよびマイナーデバイス番号から、新しく RAW デバイス番号を作成します。

  バージョン 2.3 で追加.

`os.``mkdir`(path[, mode])

  数値で指定されたモード mode をもつディレクトリ path を作成します。 mode の標準の値は `0777` (8 進) です。 指定されたディレクトリがすでに存在する場合は `OSError` 例外が送出されます。

  いくつかのシステムにおいては mode は無視されます。それが使われる時には、最初に現在の umask 値でマスクされます。もし最後の 9 ビット (つまり mode の8進法表記の最後の3桁) を除いたビットが設定されていたら、それらの意味はプラットフォームに依存します。いくつかのプラットフォームではそれらは無視され、それらを設定するためには明示的に `chmod()` を呼ぶ必要があるでしょう。

  一時ディレクトリを作成することもできます : `tempfile` モジュールの `tempfile.mkdtemp()` 関数を参照してください。

  利用できる環境 : Unix 、 Windows 。

`os.``makedirs`(path[, mode])

  再帰的なディレクトリ作成関数です。 `mkdir()` に似ていますが、末端 (leaf) となるディレクトリを作成するために必要な中間の全てのディレクトリを作成します。末端ディレクトリがすでに存在する場合や、作成ができなかった場合には `error` 例外を送出します。 mode の標準の値は `0777` (8 進) です。

  mode パラメータは `mkdir()` に渡されます; それがどのように解釈されるかは mkdir() の説明 を見てください。

  注釈

  `makedirs()` は作り出すパス要素が `os.pardir` を含むと混乱することになります。

  バージョン 1.5.2 で追加.

  バージョン 2.3 で変更: この関数は UNC パスを正しく扱えるようになりました .

`os.``pathconf`(path, name)

  名前付きファイルに関連するシステム設定情報を返します。 name には取得したい設定名を指定します ; これは定義済みのシステム値名の文字列で、多くの標準 (POSIX.1 、 Unix 95 、 Unix 98 その他 ) で定義されています。プラットフォームによっては別の名前も定義しています。ホストオペレーティングシステムの関知する名前は `pathconf_names` 辞書で与えられています。このマップ型オブジェクトに入っていない設定変数については、 name に整数を渡してもかまいません。

  もし name が文字列でかつ不明である場合、 `ValueError` を送出します。 name の指定値がホストシステムでサポートされておらず、 `pathconf_names` にも入っていない場合、 `errno.EINVAL` をエラー番号として `OSError` を送出します。

  利用できる環境 : Unix 。

`os.``pathconf_names`

  `pathconf()` および `fpathconf()` が受理するシステム設定名を、ホストオペレーティングシステムで定義されている整数値に対応付けている辞書です。この辞書はシステムでどの設定名が定義されているかを決定するために利用できます。利用出来る環境 : Unix 。

`os.``readlink`(path)

  シンボリックリンクが指しているパスを表す文字列を返します。返される値は絶対パスにも、相対パスにもなり得ます ; 相対パスの場合、 `os.path.join(os.path.dirname(path), result)` を使って絶対パスに変換することができます。

  バージョン 2.6 で変更: path が unicode オブジェクトだった場合、戻り値も unicode オブジェクトになります。

  利用できる環境 : Unix 。

`os.``remove`(path)

  ファイル path を削除 ( 消去 ) します。 path がディレクトリの場合、 `OSError` が送出されます ; ディレクトリの削除については `rmdir()` を参照してください。この関数は下で述べられている `unlink()` 関数と同一です。 Windows では、使用中のファイルを削除しようと試みると例外を送出します ; Unix では、ディレクトリエントリは削除されますが、記憶装置上にアロケーションされたファイル領域は元のファイルが使われなくなるまで残されます。

  利用できる環境 : Unix 、 Windows 。

`os.``removedirs`(path)

  再帰的なディレクトリ削除関数です。 `rmdir()` と同じように動作しますが、末端ディレクトリがうまく削除できるかぎり、 `removedirs()` は path に現れる親ディレクトリをエラーが送出されるまで ( このエラーは通常、指定したディレクトリの親ディレクトリが空でないことを意味するだけなので無視されます ) 順に削除することを試みます。例えば、 `os.removedirs('foo/bar/baz')` では最初にディレクトリ `'foo/bar/baz'` を削除し、次に `'foo/bar'` さらに `'foo'` をそれらが空ならば削除します。末端のディレクトリが削除できなかった場合には `OSError` が送出されます。

  バージョン 1.5.2 で追加.

`os.``rename`(src, dst)

  ファイルまたはディレクトリ src を dst に名前変更します。 dst がディレクトリの場合、 `OSError` が送出されます。 Unix では、 dst が存在し、かつファイルの場合、ユーザの権限があるかぎり暗黙のうちに元のファイルが置き換えられます。この操作はいくつかの Unix 系システムにおいて、 src と dst が異なるファイルシステム上にあると失敗することがあります。ファイル名の変更が成功する場合、この操作は原子的 (atomic) 操作となります ( これは POSIX 要求仕様です ) 。 Windows では、 dst が既に存在する場合には、たとえファイルの場合でも `OSError` が送出されます ; これは dst が既に存在するファイル名の場合、名前変更の原子的操作を実装する手段がないからです。

  利用できる環境 : Unix 、 Windows 。

`os.``renames`(old, new)

  再帰的にディレクトリやファイル名を変更する関数です。 `rename()` のように動作しますが、新たなパス名を持つファイルを配置するために必要な途中のディレクトリ構造をまず作成しようと試みます。名前変更の後、元のファイル名のパス要素は `removedirs()` を使って右側から順に削除されます。

  バージョン 1.5.2 で追加.

  注釈

  この関数はコピー元の末端のディレクトリまたはファイルを削除する権限がない場合には失敗します。

`os.``rmdir`(path)

  ディレクトリ path を削除します。ディレクトリが空の場合にだけ正常に動作します。そうでなければ `OSError` が送出されます。ディレクトリツリー全体を削除するには `shutil.rmtree()` を使います。

  利用できる環境 : Unix 、 Windows 。

`os.``stat`(path)

  与えられた path に対して `stat()` システムコール相当の処理を実行します。 ( この関数はシンボリックリンクをたどります。シンボリックリンクに対して stat したい場合は `lstat()` を利用してください )

  返り値はオブジェクトになり、その属性はおおむね `stat` 構造体のメンバーに対応します:

  - `st_mode` - 保護ビット

  - `st_ino` - inode 番号

  - `st_dev` - デバイス

  - `st_nlink` - ハードリンクの数

  - `st_uid` - 所有者のユーザー id

  - `st_gid` - 所有者のグループ id

  - `st_size` - ファイルのサイズ ( 単位 : バイト )

  - `st_atime` - 最近にアクセスされた時間 ,

  - `st_mtime` - 最近に内容を変更した時間 ,

  - `st_ctime` - プラットフォーム依存 ; Unix では最近のメタデータ変更時間、 Windows ではファイルが生成された時間

  バージョン 2.3 で変更: もし `stat_float_times()` が `True` を返す場合、時間値は浮動小数点で秒を計ります。ファイルシステムがサポートしていれば、秒の小数点以下の桁も含めて返されます。詳細な説明は `stat_float_times()` を参照してください。

  (Linux のような ) 一部の Unix システムでは、以下の属性が利用できる場合があります :

  - `st_blocks` - ファイルの大きさを 512 バイトのブロックサイズ単位で示す

  - `st_blksize` - 効率的にファイルシステム I/O ができる好ましいファイルシステムのブロックサイズ

  - `st_rdev` - i ノードデバイスの場合、デバイスのタイプ

  - `st_flags` - ファイルに対するユーザー定義のフラグ

  他の (FreeBSD のような ) Unix システムでは、以下の属性が利用できる場合があります ( ただし root ユーザ以外が使うと値が入っていない場合があります ):

  - `st_gen` - ファイル生成番号

  - `st_birthtime` - ファイル作成時刻

  RISCOS システムでは、以下の属性も利用できます :

  - `st_ftype` (file type),

  - `st_attrs` (attributes),

  - `st_obtype` (object type)

  注釈

  `st_atime` 、 `st_mtime` 、および `st_ctime` 属性の厳密な意味や精度はオペレーティングシステムやファイルシステムによって変わります。例えば、 FAT や FAT32 ファイルシステムを使用している Windows システムでは、 `st_mtime` の精度は 2 秒であり、 `st_atime` の精度は 1 日に過ぎません。詳しくはお使いのオペレーティングシステムのドキュメントを参照してください。

  後方互換性のため、 `stat()` の返り値は `stat` 構造体の最も重要な ( そして移植性の高い ) メンバーを表すタプルとしてもアクセス可能です。これは少なくとも 10 個の整数からなり、 `st_mode` 、 `st_ino` 、 `st_dev` 、 `st_nlink` 、 `st_uid` 、 `st_gid` 、 `st_size` 、 `st_atime` 、 `st_mtime` 、 `st_ctime` の順になります。実装によってはそれ以上のアイテムが末尾に追加されます。

  標準モジュール `stat` は `stat` 構造体からの情報の取り出しに役立つ関数と定数を定義しています。 (Windows では、一部のアイテムにダミー値が入ります )

  例

      >>> import os
      >>> statinfo = os.stat('somefile.txt')
      >>> statinfo
      (33188, 422511, 769, 1, 1032, 100, 926, 1105022698,1105022732, 1105022732)
      >>> statinfo.st_size
      926

  利用できる環境 : Unix 、 Windows 。

  バージョン 2.2 で変更: 値へのアクセスを戻り値の属性として追加しました。

  バージョン 2.5 で変更: `st_gen` および `st_birthtime` 属性が追加されました。

`os.``stat_float_times`([newvalue])

  `stat_result` がタイムスタンプに浮動小数点オブジェクトを使うかどうかを決定します。 newvalue が `True` の場合、以後の `stat()` 呼び出しは浮動小数点を返し、 `False` の場合には以後整数を返します。 newvalue が省略された場合、現在の設定どおりの返り値になります。

  古いバージョンの Python と互換性を保つため、 `stat_result` にタプルとしてアクセスすると、常に整数が返されます。

  バージョン 2.5 で変更: Python は現在デフォルトで浮動小数点値を返します。タイムスタンプが浮動小数点では正常に動作しないアプリケーションは、この関数で古い挙動を利用できます。

  タイムスタンプの精度 ( すなわち最小の小数部分 ) はシステム依存です。システムによっては秒単位の精度しかサポートしません。そういったシステムでは小数部分は常に 0 です。

  この設定の変更は、プログラムの起動時に、 __main__ モジュールの中でのみ行うことを推奨します。ライブラリは決してこの設定を変更すべきではありません。浮動小数点型のタイムスタンプを処理すると不正確な動作をするようなライブラリを使う場合、ライブラリが修正されるまで、その機能を停止させておくべきです。

`os.``statvfs`(path)

  与えられたパスに対して `statvfs()` システムコールを実行します。返り値はオブジェクトで、その属性は与えられたパスが格納されているファイルシステムについて記述したものです。各属性は `statvfs` 構造体のメンバーに対応します : `f_bsize`, `f_frsize`, `f_blocks`, `f_bfree`, `f_bavail`, `f_files`, `f_ffree`, `f_favail`, `f_flag`, `f_namemax` 。

  後方互換性のために、戻り値は上の順にそれぞれ対応する属性値が並んだタプルとしてアクセスすることもできます。標準モジュール `statvfs` では、シーケンスとしてアクセスする場合に、 `statvfs` 構造体から情報を引き出す上便利な関数や定数を定義しています ; これは属性として各フィールドにアクセスできないバージョンの Python で動作する必要のあるコードを書く際に便利です。

  利用できる環境 : Unix 。

  バージョン 2.2 で変更: 値へのアクセスを戻り値の属性として追加しました。

`os.``symlink`(source, link_name)

  source を指すシンボリックリンク link_name を作成します。

  利用できる環境 : Unix 。

`os.``tempnam`([dir[, prefix]])

  一時ファイル (temporary file) を生成する上でファイル名として相応しい一意なパス名を返します。この値は一時的なディレクトリエントリを表す絶対パスで、 dir ディレクトリの下か、dir が省略されたり `None` の場合には一時ファイルを置くための共通のディレクトリの下になります。 prefix が与えられており、かつ `None` でない場合、ファイル名の先頭につけられる短い接頭辞になります。アプリケーションは `tempnam()` が返したパス名を使って正しくファイルを生成し、生成したファイルを管理する責任があります; 一時ファイルの自動消去機能は提供されていません。Unix では、環境変数 `TMPDIR` が dir を上書きし、Windows では環境変数 `TMP` が使われます。これら関数の固有の振る舞いについては C ライブラリの実装に依存しています; いくつかの側面についてはシステムのドキュメントで曖昧です。

  警告

  `tempnam()` を使うと、 symlink 攻撃に対して脆弱になります ; 代りに `tmpfile()` (ファイルオブジェクトの生成) を使うよう検討してください。

  利用できる環境 : Unix 、 Windows 。

`os.``tmpnam`()

  一時ファイル (temporary file) を生成する上でファイル名として相応しい一意なパス名を返します。この値は一時ファイルを置くための共通のディレクトリ下の一時的なディレクトリエントリを表す絶対パスです。アプリケーションは `tmpnam()` が返したパス名を使って正しくファイルを生成し、生成したファイルを管理する責任があります ; 一時ファイルの自動消去機能は提供されていません。

  警告

  `tmpnam()` を使うと、 symlink 攻撃に対して脆弱になります ; 代りに `tmpfile()` (ファイルオブジェクトの生成) を使うよう検討してください。

  利用できる環境 : Unix, Windows 。この関数はおそらく Windows では使うべきではないでしょう ; Micorosoft の `tmpnam()` 実装では、常に現在のドライブのルートディレクトリ下のファイル名を生成しますが、これは一般的にはテンポラリファイルを置く場所としてはひどい場所です ( アクセス権限によっては、この名前をつかってファイルを開くことすらできないかもしれません ) 。

`os.``TMP_MAX`

  `tmpnam()` がテンポラリ名を再利用し始めるまでに生成できる一意な名前の最大数です。

`os.``unlink`(path)

  ファイル path を削除します。 `remove()` と同じです ; `unlink()` の名前は伝統的な Unix の関数名です。

  利用できる環境 : Unix 、 Windows 。

`os.``utime`(path, times)

  path で指定されたファイルに最終アクセス時刻および最終修正時刻を設定します。 times が `None` の場合、ファイルの最終アクセス時刻および最終更新時刻は現在の時刻になります。 ( この動作は、その path に対して Unix の touch プログラムを実行するのに似ています ) 。そうでない場合、 times は 2 要素のタプルで、 `(atime, mtime)` の形式をとらなくてはなりません。これらはそれぞれアクセス時刻および修正時刻を設定するために使われます。 path にディレクトリを指定できるかどうかは、オペレーティングシステムがディレクトリをファイルの一種として実装しているかどうかに依存します ( 例えば、 Windows はそうではありません ) 。ここで設定した時刻の値は、オペレーティングシステムがアクセス時刻や更新時刻を記録する際の精度によっては、後で `stat()` 呼び出したときの値と同じにならないかも知れないので注意してください。 `stat()` も参照してください。

  バージョン 2.0 で変更: times として `None` をサポートするようにしました .

  利用できる環境 : Unix 、 Windows 。

`os.``walk`(top, topdown=True, onerror=None, followlinks=False)

  ディレクトリツリー以下のファイル名を、ツリーをトップダウンもしくはボトムアップに走査することで作成します。ディレクトリ top を根に持つディレクトリツリーに含まれる、各ディレクトリ (top 自身を含む ) ごとに、タプル `(dirpath, dirnames, filenames)` を yield します。

  dirpath は文字列で、ディレクトリへのパスです。 dirnames は dirpath 内のサブディレクトリ名のリスト (`'.'` と `'..'` は除く）です。 filenames は dirpath 内の非ディレクトリ・ファイル名のリストです。このリスト内の名前にはファイル名までのパスが含まれません。 dirpath 内のファイルやディレクトリへの (top からたどった ) フルパスを得るには、 `os.path.join(dirpath, name)` を使用してください。

  オプション引数 topdown が `True` であるか、指定されなかった場合、各ディレクトリからタプルを生成した後で、サブディレクトリからタプルを生成します。 ( ディレクトリはトップダウンで生成 ) 。 topdown が `False` の場合、ディレクトリに対応するタプルは、そのディレクトリ以下の全てのサブディレクトリに対応するタプルの後で ( ボトムアップで ) 生成されます。 topdown の値によらず、サブディレクトリのリストは、ディレクトリとそのサブディレクトリのタプルを生成する前に取り出されます。

  topdown が `True` のとき、呼び出し側は dirnames リストを、インプレースで ( たとえば、 `del` やスライスを使った代入で ) 変更でき、 `walk()` は dirnames に残っているサブディレクトリ内のみを再帰します。これにより、検索を省略したり、特定の訪問順序を強制したり、呼び出し側が `walk()` を再開する前に、呼び出し側が作った、または名前を変更したディレクトリを、 `walk()` に知らせたりすることができます。 topdown が `False` のときに dirnames を変更しても効果はありません。ボトムアップモードでは dirpath 自身が生成される前に dirnames 内のディレクトリの情報が生成されるからです。

  デフォルトでは、 `listdir()` 呼び出しからのエラーは無視されます。オプション引数の onerror を指定する場合は関数でなければなりません ; この関数は単一の引数として `OSError` インスタンスを伴って呼び出されます。この関数でエラーを報告して走査を継続したり、例外を送出して走査を中止したりできます。ファイル名は例外オブジェクトの `filename` 属性として利用できます。

  デフォルトでは、 `walk()` はディレクトリへのシンボリックリンクをたどりません。 followlinks に `True` を指定すると、ディレクトリへのシンボリックリンクをサポートしているシステムでは、シンボリックリンクの指しているディレクトリを走査します。

  バージョン 2.6 で追加: followlinks 引数

  注釈

  followlinks に `True` を指定すると、シンボリックリンクが親ディレクトリを指していた場合に、無限ループになることに注意してください。 `walk()` はすでにたどったディレクトリを管理したりはしません。

  注釈

  相対パスを渡した場合、 `walk()` が再開されるまでの間に現在の作業ディレクトリを変更しないでください。 `walk()` はカレントディレクトリを変更しませんし、呼び出し側もカレントディレクトリを変更しないと仮定しています。

  以下の例では、最初のディレクトリ以下にある各ディレクトリに含まれる、非ディレクトリファイルのバイト数を表示します。ただし、 CVS サブディレクトリ以下は見に行きません

      import os
      from os.path import join, getsize
      for root, dirs, files in os.walk('python/Lib/email'):
          print root, "consumes",
          print sum(getsize(join(root, name)) for name in files),
          print "bytes in", len(files), "non-directory files"
          if 'CVS' in dirs:
              dirs.remove('CVS')  # don't visit CVS directories

  次の例では、ツリーをボトムアップで走査することが不可欠になります ; `rmdir()` はディレクトリが空になるまで削除を許さないからです

      # Delete everything reachable from the directory named in "top",
      # assuming there are no symbolic links.
      # CAUTION:  This is dangerous!  For example, if top == '/', it
      # could delete all your disk files.
      import os
      for root, dirs, files in os.walk(top, topdown=False):
          for name in files:
              os.remove(os.path.join(root, name))
          for name in dirs:
              os.rmdir(os.path.join(root, name))

  バージョン 2.3 で追加.

## 15.1.5. プロセス管理

以下の関数はプロセスの生成や管理に利用できます。

さまざまな `exec*` 関数は、プロセス内にロードされる新しいプログラムに与えるための、引数のリストを取ります。どの関数の場合でも、新しいプログラムに渡されるリストの最初の引数は、ユーザがコマンドラインで入力する引数ではなく、そのプログラム自体の名前です。 C プログラマならば、プログラムの `main()` に渡される `argv[0]` だと考えれば良いでしょう。たとえば、 `os.execv('/bin/echo', ['foo', 'bar'])` が標準出力に出力するのは `bar` だけで、 `foo` は無視されたかのように見えることになります。

`os.``abort`()

  `SIGABRT` シグナルを現在のプロセスに対して生成します。 Unix では、デフォルトの動作はコアダンプの生成です ; Windows では、プロセスは即座に終了コード `3` を返します。この関数の呼び出しは `signal.signal()` を使って `SIGABRT` に対し登録された Python シグナルハンドラーを呼び出さないことに注意してください。

  利用できる環境 : Unix 、 Windows 。

`os.``execl`(path, arg0, arg1, ...)
`os.``execle`(path, arg0, arg1, ..., env)
`os.``execlp`(file, arg0, arg1, ...)
`os.``execlpe`(file, arg0, arg1, ..., env)
`os.``execv`(path, args)
`os.``execve`(path, args, env)
`os.``execvp`(file, args)
`os.``execvpe`(file, args, env)

  これらの関数はすべて、現在のプロセスを置き換える形で新たなプログラムを実行します ; 現在のプロセスは返り値を返しません。 Unix では、新たに実行される実行コードは現在のプロセス内に読み込まれ、呼び出し側と同じプロセス ID を持つことになります。エラーは `OSError` 例外として報告されます。

  現在のプロセスは瞬時に置き換えられます。開かれているファイルオブジェクトやファイル記述子はフラッシュされません。そのため、バッファ内にデータが残っているかもしれない場合、 `exec*` 関数を実行する前に `sys.stdout.flush()` か `os.fsync()` を利用してバッファをフラッシュしておく必要があります。

  "l" および "v" のついた `exec*` 関数は、コマンドライン引数をどのように渡すかが異なります。 "l" 型は、コードを書くときにパラメタ数が決まっている場合に、おそらくもっとも簡単に利用できます。個々のパラメタは単に `execl*()` 関数の追加パラメタとなります。 "v" 型は、パラメタの数が可変の時に便利で、リストかタプルの引数が args パラメタとして渡されます。どちらの場合も、子プロセスに渡す引数は動作させようとしているコマンドの名前から始まるべきですが、これは強制されません。

  末尾近くに "p" をもつ型 (`execlp()`, `execlpe()`, `execvp()`, および `execvpe()`) は、プログラム file を探すために環境変数 `PATH` を利用します。環境変数が ( 次の段で述べる `exec*e` 型関数で ) 置き換えられる場合、環境変数は `PATH` を決定する上の情報源として使われます。その他の型、 `execl()`, `execle()`, `execv()`, および `execve()` では、実行コードを探すために `PATH` を使いません。 path には適切に設定された絶対パスまたは相対パスが入っていなくてはなりません。

  `execle()` 、 `execlpe()` 、 `execve()` 、および `execvpe()` ( すべて末尾に "e" がついています ) では、 env パラメーターは新たなプロセスで利用される環境変数を定義するためのマップ型でなくてはなりません ( 現在のプロセスの環境変数の代わりに利用されます ); `execl()` 、 `execlp()` 、 `execv()` 、および `execvp()` では、すべて新たなプロセスは現在のプロセスの環境を引き継ぎます。

  利用できる環境 : Unix 、 Windows 。

`os.``_exit`(n)

  終了ステータス n でプロセスを終了します。この時クリーンアップハンドラーの呼び出しや、標準入出力バッファーのフラッシュなどは行いません。

  利用できる環境 : Unix 、 Windows 。

  注釈

  終了する標準的な方法は `sys.exit(n)` です。 `_exit()` は通常、 `fork()` された後の子プロセスでのみ使われます。

以下の終了コードは必須ではありませんが `_exit()` で使うことができます。一般に、メールサーバーの外部コマンド配送プログラムのような、 Python で書かれたシステムプログラムに使います。

注釈

いくつかのバリエーションがあって、これらのすべてがすべての Unix プラットフォームで使えるわけではありません。以下の定数は下層のプラットフォームで定義されていれば定義されます。

`os.``EX_OK`

  エラーが起きなかったことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_USAGE`

  誤った個数の引数が渡された時など、コマンドが間違って使われたことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_DATAERR`

  入力データが誤っていたことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_NOINPUT`

  入力ファイルが存在しなかった、または、読み込み不可だったことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_NOUSER`

  指定されたユーザーが存在しなかったことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_NOHOST`

  指定されたホストが存在しなかったことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_UNAVAILABLE`

  要求されたサービスが利用できないことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_SOFTWARE`

  内部ソフトウェアエラーが検出されたことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_OSERR`

  fork できない、 pipe の作成ができないなど、オペレーティングシステムのエラーが検出されたことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_OSFILE`

  システムファイルが存在しなかった、開けなかった、あるいはその他のエラーが起きたことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_CANTCREAT`

  ユーザーには作成できない出力ファイルを指定したことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_IOERR`

  ファイルの I/O を行っている途中にエラーが発生した時の終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_TEMPFAIL`

  一時的な失敗が発生したことを表す終了コード。これは、再試行可能な操作の途中に、ネットワークに接続できないというような、実際にはエラーではないかも知れないことを意味します。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_PROTOCOL`

  プロトコル交換が不正、不適切、または理解不能なことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_NOPERM`

  操作を行うために十分な許可がなかった（ファイルシステムの問題を除く）ことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_CONFIG`

  設定エラーが起こったことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``EX_NOTFOUND`

  "an entry was not found" のようなことを表す終了コード。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``fork`()

  子プロセスを fork します。子プロセスでは `0` が返り、親プロセスでは子プロセスの id が返ります。エラーが発生した場合は、 `OSError` を送出します。

  FreeBSD 6.3 以下、 Cygwin 、 OS/2 EMX を含む一部のプラットフォームにおいて、 fork() をスレッド内から利用した場合に既知の問題があることに注意してください。

  警告

  SSL モジュールを fork() とともに使うアプリケーションについて、 `ssl` を参照して下さい。

  利用できる環境 : Unix 。

`os.``forkpty`()

  子プロセスを fork します。この時新しい擬似端末を子プロセスの制御端末として使います。親プロセスでは `(pid, fd)` からなるペアが返り、 fd は擬似端末のマスター側のファイル記述子となります。可搬性のあるアプローチを取るには、 `pty` モジュールを利用してください。エラーが発生した場合は、 `OSError` を送出します。

  利用できる環境 : 一部の Unix 互換環境。

`os.``kill`(pid, sig)

  プロセス pid にシグナル sig を送ります。ホストプラットフォームで利用可能なシグナルを特定する定数は `signal` モジュールで定義されています。

  Windows: `signal.CTRL_C_EVENT` と `signal.CTRL_BREAK_EVENT` は、同じコンソールウィンドウを共有しているコンソールプロセス ( 例 : 子プロセス ) にだけ送ることができる特別なシグナルです。その他の値を sig に与えると、そのプロセスが無条件に TerminateProcess API によって kill され、終了コードが sig に設定されます。 Windows の `kill()` は kill するプロセスのハンドルも受け取ります。

  バージョン 2.7 で追加: Windows サポート

`os.``killpg`(pgid, sig)

  プロセスグループ pgid にシグナル sig を送ります。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``nice`(increment)

  プロセスの "nice 値 " に increment を加えます。新たな nice 値を返します。

  利用できる環境 : Unix 。

`os.``plock`(op)

  プログラムのセグメントをメモリ内にロックします。 op (`<sys/lock.h>` で定義されています ) にはどのセグメントをロックするかを指定します。

  利用できる環境 : Unix 。

`os.``popen`(...)
`os.``popen2`(...)
`os.``popen3`(...)
`os.``popen4`(...)

  子プロセスを起動し、子プロセスとの通信のために開かれたパイプを返します。これらの関数は ファイルオブジェクトの生成 節で説明されています。

`os.``spawnl`(mode, path, ...)
`os.``spawnle`(mode, path, ..., env)
`os.``spawnlp`(mode, file, ...)
`os.``spawnlpe`(mode, file, ..., env)
`os.``spawnv`(mode, path, args)
`os.``spawnve`(mode, path, args, env)
`os.``spawnvp`(mode, file, args)
`os.``spawnvpe`(mode, file, args, env)

  新たなプロセス内でプログラム path を実行します。

  (`subprocess` モジュールが、新しいプロセスを実行して結果を取得するための、より強力な機能を提供しています。この関数の代わりに `subprocess` モジュールを利用することが推奨されています。 `subprocess` モジュールのドキュメントの、 古い関数を subprocess モジュールで置き換える セクションを参照してください )

  mode が `P_NOWAIT` の場合、この関数は新たなプロセスのプロセス ID を返します ; mode が `P_WAIT` の場合、子プロセスが正常に終了するとその終了コードが返ります。そうでない場合にはプロセスを kill したシグナル signal に対して `-signal` が返ります。 Windows では、プロセス ID は実際にはプロセスハンドル値になるので、 `waitpid()` 関数で使えます。

  "l" および "v" のついた `spawn*` 関数は、コマンドライン引数をどのように渡すかが異なります。 "l" 型は、コードを書くときにパラメタ数が決まっている場合に、おそらくもっとも簡単に利用できます。個々のパラメタは単に `spawnl*()` 関数の追加パラメタとなります。 "v" 型は、パラメタの数が可変の時に便利で、リストかタプルの引数が args パラメタとして渡されます。どちらの場合も、子プロセスに渡す引数は動作させようとしているコマンドの名前から始まらなければなりません。

  末尾近くに "p" をもつ型 (`spawnlp()`, `spawnlpe()`, `spawnvp()`, `spawnvpe()`) は、プログラム file を探すために環境変数 `PATH` を利用します。環境変数が ( 次の段で述べる `spawn*e` 型関数で ) 置き換えられる場合、環境変数は `PATH` を決定する上の情報源として使われます。その他の型、 `spawnl()`, `spawnle()`, `spawnv()`, および `spawnve()` では、実行コードを探すために `PATH` を使いません。 path には適切に設定された絶対パスまたは相対パスが入っていなくてはなりません。

  `spawnle()`, `spawnlpe()`, `spawnve()`, および `spawnvpe()` ( すべて末尾に "e" がついています ) では、 env パラメーターは新たなプロセスで利用される環境変数を定義するためのマップ型でなくてはなりません ; `spawnl()` 、 `spawnlp()` 、 `spawnv()` 、および `spawnvp()` では、すべて新たなプロセスは現在のプロセスの環境を引き継ぎます。 env 辞書のキーと値はすべて文字列である必要があります。不正なキーや値を与えると関数が失敗し、 `127` を返します。

  例えば、以下の `spawnlp()` および `spawnvpe()` 呼び出しは等価です

      import os
      os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')

      L = ['cp', 'index.html', '/dev/null']
      os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)

  利用できる環境 : Unix 、 Windows `spawnlp()` 、 `spawnlpe()` 、 `spawnvp()` 、および `spawnvpe()` は Windows では利用できません。 `spawnle()` および `spawnve()` は Windows においてスレッドセーフではありません ; 代わりに `subprocess` モジュールの利用を推奨します。

  バージョン 1.6 で追加.

`os.``P_NOWAIT`
`os.``P_NOWAITO`

  `spawn*` 関数ファミリに対する mode パラメタとして取れる値です。この値のいずれかを mode として与えた場合、 `spawn*()` 関数は新たなプロセスが生成されるとすぐに、プロセスの ID を戻り値として返ります。

  利用できる環境 : Unix 、 Windows 。

  バージョン 1.6 で追加.

`os.``P_WAIT`

  `spawn*` 関数ファミリに対する mode パラメタとして取れる値です。この値を mode として与えた場合、 `spawn*()` 関数は新たなプロセスを起動して完了するまで返らず、プロセスがうまく終了した場合には終了コードを、シグナルによってプロセスが kill された場合には `-signal` を返します。

  利用できる環境 : Unix 、 Windows 。

  バージョン 1.6 で追加.

`os.``P_DETACH`
`os.``P_OVERLAY`

  `spawn*` 関数ファミリに対する mode パラメタとして取れる値です。これらの値は上の値よりもやや可搬性において劣っています。 `P_DETACH` は `P_NOWAIT` に似ていますが、新たなプロセスは呼び出しプロセスのコンソールから切り離され (detach) ます。 `P_OVERLAY` が使われた場合、現在のプロセスは置き換えられます ; 従って `spawn*()` は返りません。

  利用出来る環境 : Windows.

  バージョン 1.6 で追加.

`os.``startfile`(path[, operation])

  ファイルを関連付けられたアプリケーションを使ってスタートします。

  operation が指定されないか、または `'open'` である時、この動作は、 Windows の Explorer 上でのファイルをダブルクリックした、あるいはコマンドプロンプト上でファイル名を start コマンドの引数としての実行した場合と等価です : ファイルは拡張子が関連付けされているアプリケーション ( が存在する場合 ) を使って開かれます。

  他の operation が与えられる場合、それはファイルに対して何がなされるべきかを表す "command verb" ( コマンドを表す動詞 ) でなければなりません。 Microsoft が文書化している動詞は、 `'print'` と `'edit'` ( ファイルに対して ) および `'explore'` と `'find'` ( ディレクトリに対して ) です。

  `startfile()` は関連付けされたアプリケーションが起動すると同時に返ります。アプリケーションが閉じるまで待機させるためのオプションはなく、アプリケーションの終了状態を取得する方法もありません。引数 path はカレントディレクトリからの相対パスです。絶対パスで指定したい場合は、最初の文字はスラッシュ (`'/'`) ではないので注意してください ; もし最初の文字がスラッシュなら、下層の Win32 `ShellExecute()` 関数は動作しません。 `os.path.normpath()` 関数を使って、 Win32 用に正しくコード化されたパスになるようにしてください。

  利用出来る環境 : Windows.

  バージョン 2.0 で追加.

  バージョン 2.5 で追加: operation パラメータ .

`os.``system`(command)

  サブシェル内でコマンド (文字列) を実行します。この関数は標準 C 関数 `system()` を使って実装されており、 `system()` と同じ制限があります。 `sys.stdin` などに対する変更を行っても、実行されるコマンドの環境には反映されません。

  Unix では、返り値はプロセスの終了ステータスで、 `wait()` で定義されている書式にコード化されています。 POSIX は `system()` 関数の返り値の意味について定義していないので、 Python の `system()` における返り値はシステム依存となることに注意してください。

  Windows では、戻り値は command を実行した後にシステムシェルから返される値で、 Windows の環境変数 `COMSPEC` となります : command.com ベースのシステム (Windows 95, 98 および ME) では、この値は常に `0` です ; cmd.exe ベースのシステム (Windows NT, 2000 および XP) では、この値は実行したコマンドの終了ステータスです ; ネイティブでないシェルを使っているシステムについては、使っているシェルのドキュメントを参照してください。

  `subprocess` モジュールは、新しいプロセスを実行して結果を取得するためのより強力な機能を提供しています。この関数の代わりに `subprocess` モジュールを利用することが推奨されています。 `subprocess` モジュールのドキュメントの 古い関数を subprocess モジュールで置き換える 節のレシピを参考にして下さい。

  利用できる環境 : Unix 、 Windows 。

`os.``times`()

  ( プロセッサまたはその他の ) 積算時間を秒で表す浮動小数点数からなる、 5 要素のタプルを返します。タプルの要素は、ユーザ時間 (user time) 、システム時間 (system time) 、子プロセスのユーザ時間、子プロセスのシステム時間、そして過去のある固定時点からの経過時間で、この順に並んでいます。 Unix マニュアルページ times(2) または対応する Windows プラットフォーム API ドキュメントを参照してください。 Windows では、最初の２つの要素だけが埋められ、残りは 0 になります。

  利用できる環境 : Unix, Windows

`os.``wait`()

  子プロセスの実行完了を待機し、子プロセスの pid と終了コードインジケーター --- 16 ビットの数値で、下位バイトがプロセスを kill したシグナル番号、上位バイトが終了ステータス ( シグナル番号がゼロの場合 ) --- の入ったタプルを返します ; コアダンプファイルが生成された場合、下位バイトの最上桁ビットが立てられます。

  利用できる環境 : Unix 。

`os.``waitpid`(pid, options)

  この関数の詳細は Unix と Windows で異なります。

  Unix の場合 : プロセス id pid で与えられた子プロセスの完了を待機し、子プロセスのプロセス id と (`wait()` と同様にコード化された ) 終了ステータスインジケーターからなるタプルを返します。この関数の動作は options によって変わります。通常の操作では `0` にします。

  pid が `0` よりも大きい場合、 `waitpid()` は特定のプロセスのステータス情報を要求します。 pid が `0` の場合、現在のプロセスグループ内の任意の子プロセスの状態に対する要求です。 pid が `-1` の場合、現在のプロセスの任意の子プロセスに対する要求です。 pid が `-1` よりも小さい場合、プロセスグループ `-pid` ( すなわち pid の絶対値 ) 内の任意のプロセスに対する要求です。

  システムコールが -1 を返した時、 `OSError` を errno と共に送出します。

  Windows では、プロセスハンドル pid を指定してプロセスの終了を待って、 pid と、終了ステータスを 8bit 左シフトした値のタプルを返します。 ( シフトは、この関数をクロスプラットフォームで利用しやすくするために行われます ) `0` 以下の pid は Windows では特別な意味を持っておらず、例外を発生させます。 options の値は効果がありません。 pid は、子プロセスで無くても、プロセス ID を知っているどんなプロセスでも参照することが可能です。 `spawn*` 関数を `P_NOWAIT` と共に呼び出した場合、適切なプロセスハンドルが返されます。

`os.``wait3`(options)

  `waitpid()` に似ていますが、プロセス id を引数に取らず、子プロセス id 、終了ステータスインジケータ、リソース使用情報の 3 要素からなるタプルを返します。リソース使用情報の詳しい情報は `resource`. `getrusage()` を参照してください。 オプション引数は `waitpid()` および `wait4()` と同じです。

  利用できる環境 : Unix 。

  バージョン 2.5 で追加.

`os.``wait4`(pid, options)

  `waitpid()` に似ていますが、子プロセス id 、終了ステータスインジケータ、リソース使用情報の 3 要素からなるタプルを返します。リソース使用情報の詳しい情報は `resource`. `getrusage()` を参照してください。 `wait4()` の引数は `waitpid()` に与えられるものと同じです。

  利用できる環境 : Unix 。

  バージョン 2.5 で追加.

`os.``WNOHANG`

  子プロセス状態がすぐに取得できなかった場合に直ちに終了するようにするための `waitpid()` のオプションです。この場合、関数は `(0, 0)` を返します。

  利用できる環境 : Unix 。

`os.``WCONTINUED`

  このオプションによって子プロセスは前回状態が報告された後にジョブ制御による停止状態から実行を再開された場合に報告されるようになります。

  利用できる環境 : ある種の Unix システム。

  バージョン 2.3 で追加.

`os.``WUNTRACED`

  このオプションによって子プロセスは停止されていながら停止されてから状態が報告されていない場合に報告されるようになります。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

以下の関数は `system()` 、 `wait()` 、あるいは `waitpid()` が返すプロセス状態コードを引数にとります。これらの関数はプロセスの配置を決めるために利用できます。

`os.``WCOREDUMP`(status)

  プロセスに対してコアダンプが生成されていた場合には `True` を、それ以外の場合は `False` を返します。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``WIFCONTINUED`(status)

  プロセスがジョブ制御による停止状態から実行を再開された (continue) 場合に `True` を、それ以外の場合は `False` を返します。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``WIFSTOPPED`(status)

  プロセスが停止された (stop) 場合に `True` を、それ以外の場合は `False` を返します。

  利用できる環境 : Unix 。

`os.``WIFSIGNALED`(status)

  プロセスがシグナルによって終了した (exit) 場合に `True` を、それ以外の場合は `False` を返します。

  利用できる環境 : Unix 。

`os.``WIFEXITED`(status)

  プロセスが exit(2) システムコールで終了した場合に `True` を、それ以外の場合は `False` を返します。

  利用できる環境 : Unix 。

`os.``WEXITSTATUS`(status)

  `WIFEXITED(status)` が真の場合、 exit(2) システムコールに渡された整数パラメーターを返します。そうでない場合、返される値には意味がありません。

  利用できる環境 : Unix 。

`os.``WSTOPSIG`(status)

  プロセスを停止させたシグナル番号を返します。

  利用できる環境 : Unix 。

`os.``WTERMSIG`(status)

  プロセスを終了させたシグナル番号を返します。

  利用できる環境 : Unix 。

## 15.1.6. 雑多なシステム情報

`os.``confstr`(name)

  システム設定値を文字列で返します。 name には取得したい設定名を指定します ; この値は定義済みのシステム値名を表す文字列にすることができます ; 名前は多くの標準 (POSIX.1 、 Unix 95 、 Unix 98 その他 ) で定義されています。ホストオペレーティングシステムの関知する名前は `confstr_names` 辞書のキーとして与えられています。このマップ型オブジェクトに入っていない設定変数については、 name に整数を渡してもかまいません。

  name に指定された設定値が定義されていない場合、 `None` を返します。

  name が文字列で、かつ不明の場合、 `ValueError` を送出します。 name の指定値がホストシステムでサポートされておらず、 `confstr_names` にも入っていない場合、 `errno.EINVAL` をエラー番号として `OSError` を送出します。

  利用できる環境 : Unix

`os.``confstr_names`

  `confstr()` が受理する名前を、ホストオペレーティングシステムで定義されている整数値に対応付けている辞書です。この辞書はシステムでどの設定名が定義されているかを決定するために利用できます。

  利用できる環境 : Unix 。

`os.``getloadavg`()

  過去 1 分、 5 分、および 15 分間の、システムの実行キューの平均プロセス数を返します。平均負荷が得られない場合には `OSError` を送出します。

  利用できる環境 : Unix 。

  バージョン 2.3 で追加.

`os.``sysconf`(name)

  整数値のシステム設定値を返します。 name で指定された設定値が定義されていない場合、 `-1` が返されます。 name に関するコメントとしては、 `confstr()` で述べた内容が同様に当てはまります ; 既知の設定名についての情報を与える辞書は `sysconf_names` で与えられています。

  利用できる環境 : Unix 。

`os.``sysconf_names`

  `sysconf()` が受理する名前を、ホストオペレーティングシステムで定義されている整数値に対応付けている辞書です。この辞書はシステムでどの設定名が定義されているかを決定するために利用できます。

  利用できる環境 : Unix 。

以下のデータ値はパス名編集操作をサポートするために利用されます。これらの値はすべてのプラットフォームで定義されています。

パス名に対する高レベルの操作は `os.path` モジュールで定義されています。

`os.``curdir`

  現在のディレクトリ参照するためにオペレーティングシステムで使われる文字列定数です。 POSIX と Windows では `'.'` になります。 `os.path` からも利用できます。

`os.``pardir`

  親ディレクトリを参照するためにオペレーティングシステムで使われる文字列定数です。 POSIX と Windows では `'..'` になります。 `os.path` からも利用できます。

`os.``sep`

  パス名を要素に分割するためにオペレーティングシステムで利用されている文字です。例えば POSIX では `'/'` で、 Windows では `'\\'` です。しかし、このことを知っているだけではパス名を解析したり、パス名同士を結合したりするには不十分です --- こうした操作には `os.path.split()` や `os.path.join()` を使用してください --- が、たまに便利なこともあります。 `os.path` からも利用できます。

`os.``altsep`

  文字パス名を要素に分割する際にオペレーティングシステムで利用されるもう一つの文字で、分割文字が一つしかない場合には `None` になります。この値は `sep` がバックスラッシュとなっている DOS や Windows システムでは `'/'` に設定されています。 `os.path` からも利用できます。

`os.``extsep`

  ベースのファイル名と拡張子を分ける文字です。例えば、 `os.py` であれば `'.'` です。 `os.path` からも利用できます。

  バージョン 2.2 で追加.

`os.``pathsep`

  (`PATH` のような ) サーチパス内の要素を分割するためにオペレーティングシステムが慣習的に用いる文字で、 POSIX における `':'` や DOS および Windows における `';'` に相当します。 `os.path` からも利用できます。

`os.``defpath`

  `exec*p*` や `spawn*p*` において、環境変数辞書内に `'PATH'` キーがない場合に使われる標準設定のサーチパスです。 `os.path` からも利用できます。

`os.``linesep`

  現在のプラットフォーム上で行を分割 ( あるいは終端 ) するために用いられている文字列です。この値は例えば POSIX での `'\n'` や Mac OS での `'\r'` のように、単一の文字にもなりますし、例えば Windows での `'\r\n'` のように複数の文字列にもなります。テキストモードで開いたファイルに書き込む時には、 os.linesep を利用しないでください。すべてのプラットフォームで、単一の `'\n'` を使用してください。

`os.``devnull`

  ヌルデバイスのファイルパスです。例えば POSIX では `'/dev/null'` で、 Windows では `'nul'` です。この値は `os.path` からも利用できます。

  バージョン 2.4 で追加.

## 15.1.7. 雑多な関数

`os.``urandom`(n)

  暗号に関する用途に適した n バイトからなるランダムな文字列を返します。

  この関数は OS 固有の乱数発生源からランダムなバイト列を生成して返します。この関数の返すデータは暗号を用いたアプリケーションで十分利用できる程度に予測不能ですが、実際のクオリティは OS の実装によって異なります。Unix系のシステムでは `/dev/urandom` への問い合わせを行い、Windows では `CryptGenRandom()` を使います。乱数発生源が見つからない場合、 `NotImplementedError` を送出します。

  プラットフォームが提供している乱数発生器へのインターフェイスについては、 `random.SystemRandom` を参照してください。

  バージョン 2.4 で追加.