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

ソースコード: Lib/os.py

このモジュールは、 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'`, `'java'`。

  参考

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

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

## 16.1.1. ファイル名、コマンドライン引数、および環境変数

Python では、ファイル名、コマンドライン引数、および環境変数を表すのに文字列型を使用します。一部のシステムでは、これらをオペレーティングシステムに渡す前に、文字列からバイト列へ、またはその逆のデコードが必要です。Python はこの変換を行うためにファイルシステムのエンコーディングを使用します (`sys.getfilesystemencoding()` 参照)。

バージョン 3.1 で変更: 一部のシステムでは、ファイルシステムのエンコーディングを使用して変換すると失敗する場合があります。この場合、Python は surrogateescape エンコーディングエラーハンドラー を使用します。これは、デコード時にデコードできないバイト列は Unicode 文字 U+DCxx に置き換えられ、それらはエンコード時に再び元のバイト列に変換されることを意味します。

ファイルシステムのエンコーディングでは、すべてが 128 バイト以下に正常にデコードされることが保証されなくてはなりません。ファイルシステムのエンコーディングでこれが保証されなかった場合は、API 関数が UnicodeError を送出します。

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

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

`os.``ctermid`()

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

  利用できる環境 : Unix 。

`os.``environ`

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

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

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

  Unix では、キーと値に `sys.getfilesystemencoding()`、エラーハンドラーに `'surrogateescape'` を使用します。異なるエンコーディングを使用したい場合は `environb` を使用します。

  注釈

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

  注釈

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

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

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

`os.``environb`

  `environ` のバイト列版です。環境変数をバイト文字列で表す マップ型 オブジェクトです。`environ` と `environb` は同期されます。(`environb` を変更すると `environ` が更新され、逆の場合も同様に更新されます)。

  `environb` は `supports_bytes_environ` が True の場合のみ利用可能です。

  バージョン 3.2 で追加.

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

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

`os.``fsencode`(filename)

  filename をファイルシステムのエンコーディングにエンコードします。エラーハンドラーに `'surrogateescape'` (Windows の場合は `'strict'`) が指定されます; 未変更の `bytes` オブジェクトを返します。

  `fsdecode()` はこの逆変換を行う関数です。

  バージョン 3.2 で追加.

  バージョン 3.6 で変更: `os.PathLike` インタフェースを実装したオブジェクトを受け入れるようになりました。

`os.``fsdecode`(filename)

  ファイルシステムのエンコーディングから path-like な filename にデコードします。エラーハンドラーに `'surrogateescape'` (Windows の場合は `'strict'`) が指定されます; 未変更の `bytes` オブジェクトを返します。

  `fsencode()` はこの逆変換を行う関数です。

  バージョン 3.2 で追加.

  バージョン 3.6 で変更: `os.PathLike` インタフェースを実装したオブジェクトを受け入れるようになりました。

`os.``fspath`(path)

  path のファイルシステム表現を返します。

  もし `str` か `bytes: のオブジェクトが渡された場合は、変更せずにそのまま返します。さもなければ、 :meth:`~os.PathLike.__fspath__` が呼び出され、その戻り値が `str` か `bytes` のオブジェクトであれば、その値を返します。他のすべてのケースでは `TypeError` が送出されます。

  バージョン 3.6 で追加.

class `os.``PathLike`

  ファイルシステムパスを表すオブジェクト(例: `pathlib.PurePath`) 向けの abstract base class です。

  バージョン 3.6 で追加.

  abstractmethod `__fspath__`()

    このオブジェクトが表現するファイルシステムパスを返します。

    このメソッドは `str` か `bytes` のオブジェクトのみを返す必要があります(`str` が好まれます)。

`os.``getenv`(key, default=None)

  環境変数 key が存在すればその値を返し、存在しなければ default を返します。key、default、および返り値は文字列です。

  Unix では、キーと値は `sys.getfilesystemencoding()`、エラーハンドラー `'surrogateescape'` でデコードされます。異なるエンコーディングを使用したい場合は `os.getenvb()` を使用します。

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

`os.``getenvb`(key, default=None)

  環境変数 key が存在すればその値を返し、存在しなければ default を返します。key、default、および返り値はバイト列型です。

  `getenvb()` は `supports_bytes_environ` が True の場合のみ利用可能です。

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

  バージョン 3.2 で追加.

`os.``get_exec_path`(env=None)

  プロセスを起動する時に名前付き実行ファイルを検索するディレクトリのリストを返します。 env が指定されると、それを環境変数の辞書とみなし、その辞書からキー PATH の値を探します。 デフォルトでは env は `None` であり、`environ` が使用されます。

  バージョン 3.2 で追加.

`os.``getegid`()

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

  利用できる環境 : Unix 。

`os.``geteuid`()

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

  利用できる環境 : Unix 。

`os.``getgid`()

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

  利用できる環境 : Unix 。

`os.``getgrouplist`(user, group)

  user が所属するグループ id のリストを返します。group がリストにない場合、それを追加します。通常、group にはユーザー user のパスワードレコードに書かれているグループ ID を指定します。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``getgroups`()

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

  利用できる環境 : Unix 。

  注釈

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

`os.``getlogin`()

  プロセスの制御端末にログインしているユーザー名を返します。ほとんどの場合、`getpass.getuser()` を使う方が便利です。なぜなら、`getpass.getuser()` は、ユーザーを見つけるために、環境変数 `LOGNAME` や `USERNAME` を調べ、さらには `pwd.getpwuid(os.getuid())[0]` まで調べに行くからです。

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

`os.``getpgid`(pid)

  プロセス id pid のプロセスのプロセスグループ id を返します。 pid が 0 の場合、現在のプロセスのプロセスグループ id を返します。

  利用できる環境 : Unix 。

`os.``getpgrp`()

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

  利用できる環境 : Unix 。

`os.``getpid`()

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

`os.``getppid`()

  親プロセスのプロセス id を返します。親プロセスが終了していた場合、Unix では init プロセスの id (1) が返され、Windows では親のプロセス id だったもの (別のプロセスで再利用されているかもしれない) がそのまま返されます。

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

  バージョン 3.2 で変更: Windows サポートが追加されました。

`os.``getpriority`(which, who)

  プログラムのスケジューリング優先度を取得します。which の値は `PRIO_PROCESS`、`PRIO_PGRP`、あるいは `PRIO_USER` のいずれか一つで、who の値は which に応じて解釈されます (`PRIO_PROCESS` であればプロセス識別子、`PRIO_PGRP` であればプロセスグループ識別子、そして `PRIO_USER` であればユーザー ID)。who の値がゼロの場合、呼び出したプロセス、呼び出したプロセスのプロセスグループ、および呼び出したプロセスの実ユーザー id を (それぞれ) 意味します。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``PRIO_PROCESS`
`os.``PRIO_PGRP`
`os.``PRIO_USER`

  `getpriority()` と `setpriority()` 用のパラメータです。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``getresuid`()

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

  利用できる環境 : Unix 。

  バージョン 3.2 で追加.

`os.``getresgid`()

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

  利用できる環境 : Unix 。

  バージョン 3.2 で追加.

`os.``getuid`()

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

  利用できる環境 : Unix 。

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

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

  利用できる環境 : Unix 。

  バージョン 3.2 で追加.

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

  key という名前の環境変数に文字列 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 。

  注釈

  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.``setpriority`(which, who, priority)

  プログラムのスケジューリング優先度を設定します。which は `PRIO_PROCESS`、`PRIO_PGRP`、あるいは `PRIO_USER` のいずれか一つで、who の値は which に応じて解釈されます (`PRIO_PROCESS` であればプロセス識別子、`PRIO_PGRP` であればプロセスグループ識別子、そして `PRIO_USER` であればユーザー ID)。who の値がゼロの場合、呼び出したプロセス、呼び出したプロセスのプロセスグループ、および呼び出したプロセスの実ユーザー id を (それぞれ) 意味します。priority は -20 から 19 の整数値で、デフォルトの優先度は 0 です。小さい数値ほど優先されるスケジューリングとなります。

  利用できる環境 : Unix

  バージョン 3.3 で追加.

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

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

  利用できる環境 : Unix 。

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

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

  利用できる環境 : Unix 。

  バージョン 3.2 で追加.

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

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

  利用できる環境 : Unix 。

  バージョン 3.2 で追加.

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

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

  利用できる環境 : Unix 。

`os.``getsid`(pid)

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

  利用できる環境 : Unix 。

`os.``setsid`()

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

  利用できる環境 : Unix 。

`os.``setuid`(uid)

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

  利用できる環境 : Unix 。

`os.``strerror`(code)

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

`os.``supports_bytes_environ`

  環境のネイティブ OS タイプがバイト型の場合、 `True` です (例: Windows では、 `False` です)。

  バージョン 3.2 で追加.

`os.``umask`(mask)

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

`os.``uname`()

  現在のオペレーティングシステムを識別する情報を返します。返り値は 5 個の属性を持つオブジェクトです:

  - `sysname` - OS の名前

  - `nodename` - (実装時に定義された) ネットワーク上でのマシン名

  - `release` - OS のリリース

  - `version` - OS のバージョン

  - `machine` - ハードウェア識別子

  後方互換性のため、このオブジェクトはイテラブルでもあり、`sysname`、`nodename`、`release`、`version`、および `machine` の 5 個の要素をこの順序で持つタプルのように振る舞います。

  一部のシステムでは、`nodename` はコンポーネントを読み込むために 8 文字または先頭の要素だけに切り詰められます; ホスト名を取得する方法としては、`socket.gethostname()` を使う方がよいでしょう。あるいは `socket.gethostbyaddr(socket.gethostname())` でもかまいません。

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

  バージョン 3.3 で変更: 返り値の型が、タプルから属性名のついたタプルライクオブジェクトに変更されました。

`os.``unsetenv`(key)

  key という名前の環境変数を unset (削除) します。このような環境変数の変更は、`os.system()`、`popen()`、または `fork()` と `execv()` で起動されたサブプロセスに影響を与えます。

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

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

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

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

`os.``fdopen`(fd, *args, **kwargs)

  ファイル記述子 fd に接続し、オープンしたファイルオブジェクトを返します。これは組み込み関数 `open()` の別名であり、同じ引数を受け取ります。唯一の違いは `fdopen()` の第一引数が常に整数でなければならないことです。

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

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

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

`fileno()` メソッドを使用して、必要な場合に file object に関連付けられているファイル記述子を取得することができます。ファイル記述子を直接使用すると、ファイルオブジェクトのメソッドが使用されないため、データの内部バッファなどの性質は無視されることに注意してください。

`os.``close`(fd)

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

  注釈

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

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

  fd_low 以上 fd_high 未満のすべてのファイル記述子をエラーを無視してクローズします。以下のコードと等価です:

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

`os.``device_encoding`(fd)

  fd に関連付けられたデバイスが端末 (ターミナル) に接続されている場合に、そのデバイスのエンコーディングを表す文字列を返します。端末に接続されていない場合、 `None` を返します。

`os.``dup`(fd)

  ファイル記述子 fd の複製を返します。新しいファイル記述子は 継承不可 です。

  Windows では、標準ストリーム (0: 標準入力、1: 標準出力、2: 標準エラー出力) を複製する場合、新しいファイル記述子は 継承可能 です。

  バージョン 3.4 で変更: 新しいファイル記述子が継承不可になりました。

`os.``dup2`(fd, fd2, inheritable=True)

  ファイル記述子 fd を fd2 に複製し、必要な場合には後者を先に閉じます。 fd2 はデフォルトでは 継承可能 で、inheritable が `False` の場合は継承不可です。

  バージョン 3.4 で変更: オプションの inheritable 引数が追加されました。

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

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

  利用できる環境 : Unix 。

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

  fd で指定されたファイルの所有者 id およびグループ id を数値 uid および gid に変更します。いずれかの id を変更せずにおくにはその値として -1 を指定します。`chown()` を参照してください。Python 3.3 以降では `os.chown(fd, uid, gid)` と等価です。

  利用できる環境 : Unix 。

`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` を送出します。

  Python 3.3 以降では `os.pathconf(fd, name)` と等価です。

  利用できる環境 : Unix 。

`os.``fstat`(fd)

  ファイル記述子 fd の状態を取得します。`stat_result` オブジェクトを返します。

  Python 3.3 以降では `os.stat(fd)` と等価です。

  参考

  `stat()` 関数。

`os.``fstatvfs`(fd)

  `statvfs()` と同様に、ファイル記述子 fd に関連付けられたファイルが格納されているファイルシステムに関する情報を返します。Python 3.3 以降では `os.statvfs(fd)` と等価です。

  利用できる環境 : Unix 。

`os.``fsync`(fd)

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

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

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

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

  ファイル記述子 fd に対応するファイルを、サイズが最長で length バイトになるように切り詰めます。Python 3.3 以降では `os.truncate(fd, length)` と等価です。

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

  バージョン 3.5 で変更: Windows サポートを追加しました。

`os.``get_blocking`(fd)

  記述子のブロッキングモードを取得します。 `O_NONBLOCK` フラグが設定されている場合は `False` で、フラグがクリアされている場合は `True` です。

  `set_blocking()` および `socket.socket.setblocking()` も参照してください。

  利用できる環境 : Unix 。

  バージョン 3.5 で追加.

`os.``isatty`(fd)

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

`os.``lockf`(fd, cmd, len)

  オープンされたファイル記述子に対して、POSIX ロックの適用、テスト、解除を行います。fd はオープンされたファイル記述子です。cmd には使用するコマンド (`F_LOCK`、`F_TLOCK`、`F_ULOCK`、あるいは `F_TEST` のいずれか一つ) を指定します。len にはロックするファイルのセクションを指定します。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``F_LOCK`
`os.``F_TLOCK`
`os.``F_ULOCK`
`os.``F_TEST`

  `lockf()` がとる動作を指定するフラグです。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

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

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

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

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

  バージョン 3.3 で追加: 一部のオペレーティングシステムは `os.SEEK_HOLE` や `os.SEEK_DATA` など、追加の値をサポートすることがあります。

`os.``open`(path, flags, mode=0o777, *, dir_fd=None)

  ファイル path を開き、flag に従って様々なフラグを設定し、可能なら mode に従ってファイルモードを設定します。mode を計算する際、まず現在の umask 値でマスクされます。新たに開いたファイルのファイル記述子を返します。新しいファイル記述子は 継承不可 です。

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

  この関数は dir_fd パラメタで ディレクトリ記述子への相対パス をサポートしています。

  バージョン 3.4 で変更: 新しいファイル記述子が継承不可になりました。

  注釈

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

  バージョン 3.3 で追加: 引数 dir_fd が追加されました。

  バージョン 3.5 で変更: システムコールが中断されシグナルハンドラが例外を送出しなかった場合、この関数は `InterruptedError` 例外を送出する代わりにシステムコールを再試行するようになりました (論拠については PEP 475 を参照してください)。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

以下の定数は `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`
`os.``O_CLOEXEC`

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

  バージョン 3.3 で変更: 定数 `O_CLOEXEC` が追加されました。

`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_PATH`
`os.``O_TMPFILE`
`os.``O_SHLOCK`
`os.``O_EXLOCK`

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

  バージョン 3.4 で変更: `O_PATH` を、それをサポートするシステムで追加しました。また、 `O_TMPFILE` を追加しました (Linux Kernel 3.11 以降でのみ利用可能です)。

`os.``openpty`()

  新しい擬似端末のペアを開きます。pty および tty を表すファイル記述子のペア `(master, slave)` を返します。新しいファイル記述子は 継承不可 です。(若干) 可搬性の高いアプローチには `pty` を使用してください。

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

  バージョン 3.4 で変更: 新しいファイル記述子が継承不可になりました。

`os.``pipe`()

  パイプを作成します。読み込み、書き込みに使うことの出来るファイル記述子のペア `(r, w)` を返します。新しいファイル記述子は 継承不可 です。

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

  バージョン 3.4 で変更: 新しいファイル記述子が継承不可になりました。

`os.``pipe2`(flags)

  flags を設定したパイプをアトミックに作成します。flags には値 `O_NONBLOCK` と `O_CLOEXEC` を一つ以上論理和指定できます。読み込み、書き込みに使うことの出来るファイル記述子のペア `(r, w)` を返します。

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

  バージョン 3.3 で追加.

`os.``posix_fallocate`(fd, offset, len)

  fd で指定されたファイルに対し、開始位置 offset から len バイト分割り当てるに十分なディスクスペースを確保します。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``posix_fadvise`(fd, offset, len, advice)

  データへアクセスする意思を、パターンを指定して宣言します。これによりカーネルが最適化を行えるようになります。advice は fd で指定されたファイルに対し、開始位置 offset から len バイト分の領域に適用されます。advice には `POSIX_FADV_NORMAL`、`POSIX_FADV_SEQUENTIAL`、`POSIX_FADV_RANDOM`、`POSIX_FADV_NOREUSE`、`POSIX_FADV_WILLNEED`、または `POSIX_FADV_DONTNEED` のいずれか一つを指定します。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``POSIX_FADV_NORMAL`
`os.``POSIX_FADV_SEQUENTIAL`
`os.``POSIX_FADV_RANDOM`
`os.``POSIX_FADV_NOREUSE`
`os.``POSIX_FADV_WILLNEED`
`os.``POSIX_FADV_DONTNEED`

  `posix_fadvise()` において、使われるであろうアクセスパターンを指定する advice に使用できるフラグです。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``pread`(fd, buffersize, offset)

  ファイル記述子 fd に対し、位置 offset から読み込みます。読み込み量は最大で buffersize バイトです。ファイルオフセットは変化しません。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``pwrite`(fd, str, offset)

  ファイル記述子 fd に対し、位置 offset から bytestring を書き出します。ファイルオフセットは変化しません。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

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

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

  注釈

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

  バージョン 3.5 で変更: システムコールが中断されシグナルハンドラが例外を送出しなかった場合、この関数は `InterruptedError` 例外を送出する代わりにシステムコールを再試行するようになりました (論拠については PEP 475 を参照してください)。

`os.``sendfile`(out, in, offset, count)
`os.``sendfile`(out, in, offset, count, [headers, ][trailers, ]flags=0)

  ファイル記述子 in からファイル記述子 out への開始位置 offset へ count バイトコピーします。 送信バイト数を返します。 EOF に達した場合は 0 を返します。

  前者の関数表記は `sendfile()` が定義されているすべてのプラットフォームでサポートされています。

  Linux では、offset に `None` が与えられると、バイト列は in の現在の位置から読み込まれ、in の位置は更新されます。

  後者は Mac OS X および FreeBSD で使用される場合があります。headers および trailers は任意のバッファのシーケンス型オブジェクトで、in からのデータが書き出される前と後に書き出されます。返り値は前者と同じです。

  Mac OS X と FreeBSD では、count の値に 0 を指定すると、in の末尾に達するまで送信します。

  全てのプラットフォームはソケットをファイル記述子 out としてサポートし、あるプラットフォームは他の種類 (例えば、通常のファイル、パイプ) も同様にサポートします。

  クロスプラットフォームのアプリケーションは headers、trailers ならびに flags 引数を使用するべきではありません。

  利用できる環境 : Unix 。

  注釈

  `sendfile()` のより高水準のラッパについては `socket.socket.sendfile()` を参照してください。

  バージョン 3.3 で追加.

`os.``set_blocking`(fd, blocking)

  指定されたファイル記述子のブロッキングモードを設定します。 ブロッキングが `False` の場合 `O_NONBLOCK` フラグを設定し、そうでない場合はクリアします。

  `get_blocking()` および `socket.socket.setblocking()` も参照してください。

  利用できる環境 : Unix 。

  バージョン 3.5 で追加.

`os.``SF_NODISKIO`
`os.``SF_MNOWAIT`
`os.``SF_SYNC`

  実装がサポートしている場合 `sendfile()` 関数に渡すパラメーターです。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``readv`(fd, buffers)

  ファイル記述子 fd から、いくつかのミュータブルな バイトライクオブジェクト buffers に読み込みます。 `readv()` は、各バッファーにいっぱいになるまでデータを転送したのちシーケンス内の次のバッファーに移動し、データの残りを転送します。 `readv()` は、読み込んだ合計バイト数 (すべてのオブジェクトの合計容量より小さい場合があります) を返します。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`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)

  str のバイト列をファイル記述子 fd に書き出します。実際に書き出されたバイト数が返されます。

  注釈

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

  バージョン 3.5 で変更: システムコールが中断されシグナルハンドラが例外を送出しなかった場合、この関数は `InterruptedError` 例外を送出する代わりにシステムコールを再試行するようになりました (論拠については PEP 475 を参照してください)。

`os.``writev`(fd, buffers)

  buffers の内容をファイル記述子 fd へ書き出します。 buffers は bytes-like オブジェクト のシーケンスでなければなりません。バッファは配列の順番で処理されます。最初のバッファの内容全体は 2 番目のバッファに進む前に書き込まれ、その次も同様です。オペレーティングシステムは使われるバッファの数を制限するかもしれません (sysconf() 値の SC_IOV_MAX) 。

  `writev()` は各オブジェクトの内容をファイル記述子に書き出し、書き出されたバイト数の合計を返します。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

### 16.1.4.1. ターミナルのサイズの問い合わせ

バージョン 3.3 で追加.

`os.``get_terminal_size`(fd=STDOUT_FILENO)

  ターミナル (端末) のサイズ `(columns, lines)` を、`terminal_size` 型のタプルで返します。

  オプションの引数 `fd` には問い合わせるファイル記述子を指定します (デフォルトは `STDOUT_FILENO`、または標準出力)。

  ファイル記述子が接続されていなかった場合、 `OSError` が送出されます。

  通常は高水準関数である `shutil.get_terminal_size()` を使用してください。`os.get_terminal_size` は低水準の実装です。

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

class `os.``terminal_size`

  ターミナルウィンドウのサイズ `(columns, lines)` を保持するタプルのサブクラスです。

  `columns`

    ターミナルウィンドウの横幅 (文字数) です。

  `lines`

    ターミナルウィンドウの高さ (文字数) です。

### 16.1.4.2. ファイル記述子の継承

バージョン 3.4 で追加.

ファイル記述子には「継承可能 (inheritable)」フラグというものがあって、これにより子プロセスにファイル記述子が引き継がれるかどうかが決定されます。Python 3.4 より、 Python によって作成されるファイル記述子はデフォルトで継承不可 (non-inheritable) となりました。

UNIX の場合、継承不可のファイル記述子は新規プロセス実行時にクローズされ、そうでないファイル記述子は引き継がれます。

Windows の場合は、標準ストリームを除き、継承不可のハンドルと継承不可のファイル記述子は子プロセスでクローズされます。標準ストリーム (ファイル記述子の 0, 1, 2: 標準入力, 標準出力, 標準エラー出力) は常に引き継がれます。 `spawn*` 関数を使う場合、全ての継承可能なハンドルと全ての継承可能なファイル記述子は引き継がれます。 `subprocess` モジュールを使う場合、標準ストリームを除く全てのファイル記述子はクローズされ、継承可能なハンドルは close_fds 引数が `False` の場合にのみ引き継がれます。

`os.``get_inheritable`(fd)

  指定したファイル記述子の「継承可能 (inheritable)」フラグを取得します (boolean)。

`os.``set_inheritable`(fd, inheritable)

  指定したファイル記述子の「継承可能 (inheritable)」フラグをセットします。

`os.``get_handle_inheritable`(handle)

  指定したハンドルの「継承可能 (inheritable)」フラグを取得します (boolean)。

  利用できる環境 : Windows.

`os.``set_handle_inheritable`(handle, inheritable)

  指定したハンドルの「継承可能 (inheritable)」フラグをセットします。

  利用できる環境 : Windows.

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

一部の Unix プラットフォームでは、このセクションの関数の多くが以下の機能を一つ以上サポートしています。

- ファイル記述子の指定: 一部の関数では、path 引数はパス名を示す文字列だけでなく、ファイル記述子でも指定できます。関数はファイル記述子が参照するファイルを操作します。(POSIX システムでは、Python は関数の `f...` バージョンを呼び出します)

  そのプラットフォーム上で path にファイル記述子を使用できるかどうかは、`os.supports_fd` で確認できます。使用できない場合 `NotImplementedError` が送出されます。

  その関数が引数に dir_fd または follow_symlinks もサポートしている場合、path にファイル記述子を指定した時にそれらのいずれかを指定するとエラーになります。

- ディレクトリ記述子への相対パス: dir_fd が `None` ではない場合、そのファイル記述子はディレクトリを参照しているはずであり、操作するパスは相対パスであるべきです; パスはそのディレクトリへの相対パスになります。パスが絶対パスであった場合、dir_fd は無視されます。(POSIX システムでは、Python は関数の `...at` または `f...at` バージョンを呼び出します)

  そのプラットフォーム上で dir_fd がサポートされているかどうかは、`os.supports_dir_fd` で確認できます。サポートされていない場合 `NotImplementedError` が送出されます。

- シンボリックリンクをたどらない: follow_symlinks が `False` で、かつ、操作するパスの末尾の要素がシンボリックリンクの場合、その関数はリンクの指し示す先のファイルではなく、シンボリックリンク自身を操作します。(POSIX システムでは、Python は関数の `l...` バージョンを呼び出します)

  そのプラットフォーム上で follow_symlinks がサポートされているかどうかは、`os.supports_follow_symlinks` で確認できます。利用できない場合 `NotImplementedError` が送出されます。

`os.``access`(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)

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

  この関数は ディレクトリ記述子への相対パス および シンボリックリンクをたどらない をサポートしています。

  effective_ids が `True` の場合、`access()` は実 uid/gid ではなく実効 uid/gid を使用してアクセス権を調べます。プラットフォームによっては effective_ids がサポートされていない場合があります; サポートされているかどうかは `os.supports_effective_ids` で確認できます。利用できない場合 `NotImplementedError` が送出されます。

  注釈

  ユーザーが、例えばファイルを開く権限を持っているかどうかを調べるために実際に `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 PermissionError:
          return "some default data"
      else:
          with fp:
              return fp.read()

  注釈

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

  バージョン 3.3 で変更: 引数 dir_fd、effective_ids、および follow_symlinks が追加されました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``F_OK`
`os.``R_OK`
`os.``W_OK`
`os.``X_OK`

  `access()` で path をテストする時に mode 引数に渡す値です。上からそれぞれ、ファイルの存在、読み込み許可、書き込み許可、および実行許可になります。

`os.``chdir`(path)

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

  この関数は ファイル記述子の指定 をサポートしています。記述子は、オープンしているファイルではなく、オープンしているディレクトリを参照していなければなりません。

  バージョン 3.3 で追加: 一部のプラットフォームで、path にファイル記述子の指定をサポートしました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``chflags`(path, flags, *, follow_symlinks=True)

  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 。

  バージョン 3.3 で追加: 引数 follow_symlinks を追加しました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``chmod`(path, mode, *, dir_fd=None, follow_symlinks=True)

  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`

  この関数は ファイル記述子の指定 、 ディレクトリ記述子への相対パス 、および シンボリックリンクをたどらない をサポートしています。

  注釈

  Windows は `chmod()` をサポートしていますが、ファイルの読み出し専用フラグを (`stat.S_IWRITE` および `stat.S_IREAD` 定数または対応する整数値によって) 設定できるだけです。その他のビットはすべて無視されます。

  バージョン 3.3 で追加: path にオープンしているファイル記述子の指定のサポート、および引数 dir_fd と follow_symlinks を追加しました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``chown`(path, uid, gid, *, dir_fd=None, follow_symlinks=True)

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

  この関数は ファイル記述子の指定 、 ディレクトリ記述子への相対パス 、および シンボリックリンクをたどらない をサポートしています。

  数値 id の他に名前でも受け取る高水準関数の `shutil.chown()` を参照してください。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加: path にオープンしているファイル記述子の指定のサポート、および引数 dir_fd と follow_symlinks を追加しました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``chroot`(path)

  現在のプロセスのルートディレクトリを path に変更します。

  利用できる環境 : Unix 。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``fchdir`(fd)

  現在の作業ディレクトリをファイル記述子 fd が表すディレクトリに変更します。記述子はオープンしているファイルではなく、オープンしたディレクトリを参照していなければなりません。Python 3.3 以降では `os.chdir(fd)` と等価です。

  利用できる環境 : Unix 。

`os.``getcwd`()

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

`os.``getcwdb`()

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

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

  path のフラグを数値 flags に設定します。`chflags()` に似ていますが、シンボリックリンクをたどりません。Python 3.3 以降では `os.chflags(path, flags, follow_symlinks=False)` と等価です。

  利用できる環境 : Unix 。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

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

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

  利用できる環境 : Unix 。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

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

  path の所有者 id およびグループ id を、数値 uid および gid に変更します。この関数はシンボリックリンクをたどりません。Python 3.3 以降では `os.chown(path, uid, gid, follow_symlinks=False)` と等価です。

  利用できる環境 : Unix 。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``link`(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True)

  src を指し示すハードリンク dst を作成します。

  この関数は src_dir_fd と dst_dir_fd の両方またはどちらかに対し ディレクトリ記述子への相対パス および シンボリックリンクをたどらない をサポートしています。

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

  バージョン 3.2 で変更: Windows サポートを追加しました。

  バージョン 3.3 で追加: 引数 src_dir_fd、dst_dir_fd、および follow_symlinks を追加しました。

  バージョン 3.6 で変更: src と dst が path-like object を受け付けるようになりました。

`os.``listdir`(path='.')

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

  path may be a path-like object. If path is of type `bytes` (directly or indirectly through the `PathLike` interface), the filenames returned will also be of type `bytes`; in all other circumstances, they will be of type `str`.

  この関数は ファイル記述子の指定 もサポートしています; ファイル記述子はディレクトリを参照していなくてはなりません。

  注釈

  `文字列型` のファイル名を `バイト列型` にエンコードするには、`fsencode()` を使用します。

  参考

  ディレクトリエントリに加えてファイル属性情報も返す `scandir()` 関数の方が、多くの一般的な用途では使い勝手が良くなります。

  バージョン 3.2 で変更: 引数 path は任意になりました。

  バージョン 3.3 で追加: path にオープンしているファイル記述子の指定をサポートしました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``lstat`(path, *, dir_fd=None)

  与えられたパスに対して `lstat()` システムコールと同じ処理を行います。`stat()` と似ていますが、シンボリックリンクをたどりません。 `stat_result` オブジェクトを返します。

  シンボリックリンクをサポートしていないプラットフォームでは `stat()` の別名です。

  Python 3.3 以降では `os.stat(path, dir_fd=dir_fd, follow_symlinks=False)` と等価です。

  この関数は ディレクトリ記述子への相対パス もサポートすることができます。

  参考

  `stat()` 関数。

  バージョン 3.2 で変更: Windows 6.0 (Vista) のシンボリックリンクをサポートしました。

  バージョン 3.3 で変更: 引数 dir_fd を追加しました。

  バージョン 3.6 で変更: src と dst が path-like object を受け付けるようになりました。

`os.``mkdir`(path, mode=0o777, *, dir_fd=None)

  ディレクトリ path を数値モード mode で作成します。

  すでにディレクトリが存在したら、 `FileExistsError` が上げられます。

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

  この関数は ディレクトリ記述子への相対パス もサポートすることができます。

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

  バージョン 3.3 で追加: 引数 dir_fd が追加されました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``makedirs`(name, mode=0o777, exist_ok=False)

  再帰的にディレクトリを作成する関数です。`mkdir()` と似ていますが、末端ディレクトリを作成するために必要なすべての中間ディレクトリも作成します。

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

  exist_ok が (デフォルトの) `False` である場合、ターゲットのディレクトリが既に存在していれば `OSError` が送出されます。

  注釈

  作成するパス要素に `pardir` (UNIX では "..") が含まれる場合、`makedirs()` は混乱します。

  この関数は UNC パスを正しく扱えるようになりました。

  バージョン 3.2 で追加: 引数 exist_ok が追加されました。

  バージョン 3.4.1 で変更: Python 3.4.1 より前、 exist_ok が `True` でそのディレクトリが既存の場合でも、 `makedirs()` は mode が既存ディレクトリのモードと合わない場合にはエラーにしようとしていました。このモードチェックの振る舞いを安全に実装することが出来なかったため、 Python 3.4.1 でこのチェックは削除されました。 bpo-21082 を参照してください。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``mkfifo`(path, mode=0o666, *, dir_fd=None)

  FIFO (名前付きパイプ) path を数値モード mode で作成します。先に現在の umask 値でマスクされます。

  この関数は ディレクトリ記述子への相対パス もサポートすることができます。

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

  利用できる環境 : Unix 。

  バージョン 3.3 で追加: 引数 dir_fd が追加されました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``mknod`(path, mode=0o600, device=0, *, dir_fd=None)

  path という名前で、ファイルシステムノード (ファイル、デバイス特殊ファイル、または名前つきパイプ) を作成します。mode は、作成するノードのアクセス権限とタイプの両方を `stat.S_IFREG`、`stat.S_IFCHR`、`stat.S_IFBLK`、および `stat.S_IFIFO` の組み合わせ (ビット単位の論理和) で指定します (これらの定数は `stat` で利用可能です)。`stat.S_IFCHR` と `stat.S_IFBLK` を指定した場合、devide は新しく作成されたデバイス特殊ファイルを (おそらく `os.makedev()` を使って) 定義し、それ以外の定数を指定した場合は無視されます。

  この関数は ディレクトリ記述子への相対パス もサポートすることができます。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加: 引数 dir_fd が追加されました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``major`(device)

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

`os.``minor`(device)

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

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

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

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

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

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

  この関数は ファイル記述子の指定 をサポートしています。

  利用できる環境 : Unix 。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``pathconf_names`

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

  利用できる環境 : Unix 。

`os.``readlink`(path, *, dir_fd=None)

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

  If the path is a string object (directly or indirectly through a `PathLike` interface), the result will also be a string object, and the call may raise a UnicodeDecodeError. If the path is a bytes object (direct or indirectly), the result will be a bytes object.

  この関数は ディレクトリ記述子への相対パス もサポートすることができます。

  利用できる環境 : Unix, Windows

  バージョン 3.2 で変更: Windows 6.0 (Vista) のシンボリックリンクをサポートしました。

  バージョン 3.3 で追加: 引数 dir_fd が追加されました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``remove`(path, *, dir_fd=None)

  ファイル path を削除します。 path がディレクトリの場合、`OSError` が送出されます; ディレクトリの削除には `rmdir()` を使用してください。

  この関数は ディレクトリ記述子への相対パス をサポートしています。

  Windows では、使用中のファイルを削除しようとすると例外を送出します; Unixでは、ディレクトリエントリは削除されますが、記憶装置上に割り当てられたファイル領域は元のファイルが使われなくなるまで残されます。

  この関数は意味論的に `unlink()` と同一です。

  バージョン 3.3 で追加: 引数 dir_fd が追加されました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``removedirs`(name)

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

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``rename`(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

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

  この関数は src_dir_fd と dst_dir_fd のどちらかまたは両方の指定に ディレクトリ記述子への相対パス をサポートしています。

  対象の上書きがクロスプラットフォームになる場合は `replace()` を使用してください。

  バージョン 3.3 で追加: 引数 src_dir_fd および dst_dir_fd が追加されました。

  バージョン 3.6 で変更: src と dst が path-like object を受け付けるようになりました。

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

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

  注釈

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

  バージョン 3.6 で変更: old と new が path-like object を受け付けるようになりました。

`os.``replace`(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

  ファイルまたはディレクトリ src の名前を dst へ変更します。dst がディレクトリの場合 `OSError` が送出されます。dst が存在し、かつファイルの場合、ユーザーの権限がある限り暗黙のうちに置き換えられます。src と dst が異なるファイルシステム上にあると失敗することがあります。ファイル名の変更が成功する場合はアトミック操作となります (これは POSIX 要求仕様です)。

  この関数は src_dir_fd と dst_dir_fd のどちらかまたは両方の指定に ディレクトリ記述子への相対パス をサポートしています。

  バージョン 3.3 で追加.

  バージョン 3.6 で変更: src と dst が path-like object を受け付けるようになりました。

`os.``rmdir`(path, *, dir_fd=None)

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

  この関数は ディレクトリ記述子への相対パス をサポートしています。

  バージョン 3.3 で追加: 引数 dir_fd が追加されました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``scandir`(path='.')

  path で指定されたディレクトリ内のエントリに対応する `os.DirEntry` オブジェクトのイテレータを返します。このエントリは、任意の順序で yield され、特殊エントリ `'.'` および `'..'` は含められません。

  `listdir()` の代わりに `scandir()` を使用すると、ファイルタイプや属性情報も必要とするコードのパフォーマンスが大幅に向上します。これは、オペレーティングシステムがディレクトリのスキャン中にこの情報を提供した場合、`os.DirEntry` オブジェクトがその情報を公開するからです。すべての `os.DirEntry` メソッドはシステムコールを実行する場合がありますが、`is_dir()` と `is_file()` は、通常はシンボリックリンクにしかシステムコールを必要としません。`os.DirEntry.stat()` は、Unix 上では常にシステムコールを必要としますが、Windows ではシンボリックリンク用にシステムコールを一つ必要とするだけです。

  path may be a path-like object. If path is of type `bytes` (directly or indirectly through the `PathLike` interface), the type of the `name` and `path` attributes of each `os.DirEntry` will be `bytes`; in all other circumstances, they will be of type `str`.

  `scandir()` イテレータは、 コンテキストマネージャ プロトコルをサポートし、次のメソッドを持ちます。

  `scandir.``close`()

    イテレータを閉じ、獲得した資源を開放します。

    この関数は、イテレータがすべて消費されるか、ガーベージコレクトされた、もしくはイテレート中にエラーが発生した際に自動的に呼び出されます。しかし、 `with` 文を用いるか、明示的に呼び出すことを推奨します。

    バージョン 3.6 で追加.

  次の単純な例では、`scandir()` を使用して、指定した path 内の先頭が `'.'` でないすべてのファイル (ディレクトリを除く) をすべて表示します。`entry.is_file()` を呼び出しても、通常は追加のシステムコールは行われません:

      with os.scandir(path) as it:
          for entry in it:
              if not entry.name.startswith('.') and entry.is_file():
                  print(entry.name)

  注釈

  On Unix-based systems, `scandir()` uses the system's opendir() and readdir() functions. On Windows, it uses the Win32 FindFirstFileW and FindNextFileW functions.

  バージョン 3.5 で追加.

  バージョン 3.6 で追加: Added support for the context manager protocol and the `close()` method. If a `scandir()` iterator is neither exhausted nor explicitly closed a `ResourceWarning` will be emitted in its destructor.

  関数が path-like object を受け入れるようになりました。

class `os.``DirEntry`

  ディレクトリエントリのファイルパスとその他のファイル属性を公開するために、`scandir()` が yield するオブジェクトです。

  `scandir()` は、追加のシステムコールを実行することなく、この情報をできるだけ多く提供します。`stat()` または `lstat()` システムコールが実行された場合、`os.DirEntry` オブジェクトは結果をキャッシュします。

  `os.DirEntry` インスタンスは、寿命の長いデータ構造に保存されることは想定されていません。ファイルメタデータが変更された場合や、 `scandir()` が呼び出されてから長時間が経過した場合は、 `os.stat(entry.path)` を呼び出して最新の情報を取得してください。

  `os.DirEntry` のメソッドはオペレーティングシステムコールを実行する場合があるため、それらは `OSError` も送出する場合があります。エラーを細かく制御する必要がある場合、 `os.DirEntry` のメソッドの一つの呼び出し時に `OSError` を捕捉して、適切な処理を行うことができます。

  To be directly usable as a path-like object, `os.DirEntry` implements the `PathLike` interface.

  `os.DirEntry` インスタンスの属性とメソッドは以下の通りです:

  `name`

    `scandir()` の path 引数に対して相対的な、エントリのベースファイル名です。

    The `name` attribute will be `bytes` if the `scandir()` path argument is of type `bytes` and `str` otherwise. Use `fsdecode()` to decode byte filenames.

  `path`

    `os.path.join(scandir_path, entry.name)` と等価の、エントリの絶対パス名です。ここで、scandir_path は `scandir()` の path 引数です。このパスは、`scandir()` の path 引数が絶対パスの場合にのみ、絶対パスです。

    The `path` attribute will be `bytes` if the `scandir()` path argument is of type `bytes` and `str` otherwise. Use `fsdecode()` to decode byte filenames.

  `inode`()

    項目の inode 番号を返します。

    結果は `os.DirEntry` オブジェクトにキャッシュされます。最新の情報を取得するには `os.stat(entry.path, follow_symlinks=False).st_ino` を使用してください。

    Windows 上では、最初のキャッシュされていない呼び出しでシステムコールが必要ですが、 Unix 上では必要ありません。

  `is_dir`(*, follow_symlinks=True)

    この項目がディレクトリまたはディレクトリへのシンボリックリンクである場合、 `True` を返します。項目がそれ以外のファイルやそれ以外のファイルへのシンボリックリンクである場合や、もはや存在しない場合は `False` を返します。

    follow_symlinks が `False` の場合、項目がディレクトリ (シンボリックリンクはたどりません) の場合にのみ `True` を返します。項目がディレクトリ以外のファイルである場合や、項目がもはや存在しない場合は `False` を返します。

    結果は `os.DirEntry` オブジェクトにキャッシュされます。follow_symlinks が `True` の場合と `False` の場合とでは、別のオブジェクトにキャッシュされます。最新の情報を取得するには `stat.S_ISDIR()` と共に `os.stat()` を呼び出してください。

    多くの場合、最初のキャッシュされない呼び出しでは、システムコールは必要とされません。具体的には、シンボリックリンク以外では、Windows も Unix もシステムコールを必要としません。ただし、`dirent.d_type == DT_UNKNOWN` を返す、ネットワークファイルシステムなどの特定の Unix ファイルシステムは例外です。項目がシンボリックリンクの場合、follow_symlinks が `False` の場合を除き、シンボリックリンクをたどるためにシステムコールが必要となります。

    このメソッドは `PermissionError` のような `OSError` を送出することがありますが、 `FileNotFoundError` は捕捉され送出されません。

  `is_file`(*, follow_symlinks=True)

    この項目がファイルまたはファイルへのシンボリックリンクである場合、 `True` を返します。項目がディレクトリやファイル以外の項目へのシンボリックリンクである場合や、もはや存在しない場合は `False` を返します。

    follow_symlinks が `False` の場合、項目がファイル (シンボリックリンクはたどりません) の場合にのみ `True` を返します。項目がディレクトリやその他のファイル以外の項目である場合や、項目がもはや存在しない場合は `False` を返します。

    結果は `os.DirEntry` オブジェクトにキャッシュされます。キャッシュ、システムコール、例外は、`is_dir()` と同様に行われます。

  `is_symlink`()

    この項目がシンボリックリンクの場合 (たとえ破損していても)、`True` を返します。項目がディレクトリやあらゆる種類のファイルの場合、またはもはや存在しない場合は `False` を返します。

    結果は `os.DirEntry` オブジェクトにキャッシュされます。 最新の情報をフェッチするには `os.path.islink()` を呼び出してください。

    多くの場合、最初のキャッシュされない呼び出しでは、システムコールは必要とされません。具体的には、Windows も Unix もシステムコールを必要としません。ただし、`dirent.d_type == DT_UNKNOWN` を返す、ネットワークファイルシステムなどの特定の Unix ファイルシステムは例外です。

    このメソッドは `PermissionError` のような `OSError` を送出することがありますが、 `FileNotFoundError` は捕捉され送出されません。

  `stat`(*, follow_symlinks=True)

    この項目の `stat_result` オブジェクトを返します。このメソッドは、デフォルトでシンボリックリンクをたどります。シンボリックリンクを開始するには、 `follow_symlinks=False` 引数を追加します。

    Unix では、このメソッドは常にシステムコールを必要とします。Windows では、 follow_symlinks が `True` かつ、項目がシンボリックリンクの場合にのみシステムコールが必要となります。

    Windows では、`stat_result` の `st_ino` 、 `st_dev` 、 `st_nlink` 属性は常にゼロに設定されます。これらの属性を取得するには、 `os.stat()` を呼び出します。

    結果は `os.DirEntry` オブジェクトにキャッシュされます。follow_symlinks が `True` の場合と `False` の場合とでは、別のオブジェクトにキャッシュされます。最新の情報を取得するには、 `os.stat()` を呼び出してください。

  `os.DirEntry` と `pathlib.Path` では、いくつかの属性やメソッドがよい対応関係にあります。特に、 `name` 属性は同じ意味を持ちます。`is_dir()` 、 `is_file()` 、 `is_symlink()` 、 `stat()` メソッドも同じ意味を持ちます。

  バージョン 3.5 で追加.

  バージョン 3.6 で変更: `PathLike` インターフェースをサポートしました。Windowsで:class:bytes パスをサポートしました。

`os.``stat`(path, *, dir_fd=None, follow_symlinks=True)

  Get the status of a file or a file descriptor. Perform the equivalent of a `stat()` system call on the given path. path may be specified as either a string or bytes -- directly or indirectly through the `PathLike` interface -- or as an open file descriptor. Return a `stat_result` object.

  この関数は通常はシンボリックリンクをたどります。シンボリックリンクに対して stat したい場合は `follow_symlinks=False` とするか、 `lstat()` を利用してください。

  この関数は ファイル記述子の指定 および シンボリックリンクをたどらない をサポートしています。

  以下はプログラム例です:

      >>> import os
      >>> statinfo = os.stat('somefile.txt')
      >>> statinfo
      os.stat_result(st_mode=33188, st_ino=7876932, st_dev=234881026,
      st_nlink=1, st_uid=501, st_gid=501, st_size=264, st_atime=1297230295,
      st_mtime=1297230027, st_ctime=1297230027)
      >>> statinfo.st_size
      264

  参考

  `fstat()` と `lstat()`。

  バージョン 3.3 で追加: dir_fd, follow_symlinks 引数の追加、ファイル記述子の指定の追加。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

class `os.``stat_result`

  おおむね `stat` 構造体のメンバーに対応する属性を持つオブジェクトです。`os.stat()` 、 `os.fstat()` 、 `os.lstat()` の結果に使用されます。

  属性:

  `st_mode`

    ファイルモード。ファイルタイプとファイルモードのビット （権限）。

  `st_ino`

    Platform dependent, but if non-zero, uniquely identifies the file for a given value of `st_dev`. Typically:

    - the inode number on Unix,

    - the file index on Windows

  `st_dev`

    このファイルが存在するデバイスの識別子。

  `st_nlink`

    ハードリンクの数。

  `st_uid`

    ファイル所有者のユーザ識別子。

  `st_gid`

    ファイル所有者のグループ識別子。

  `st_size`

    ファイルが通常のファイルまたはシンボリックリンクの場合、そのファイルのバイト単位でのサイズです。シンボリックリンクのサイズは、含まれるパス名の長さで、null バイトで終わることはありません。

  タイムスタンプ:

  `st_atime`

    秒で表した最終アクセス時刻。

  `st_mtime`

    秒で表した最終内容更新時刻。

  `st_ctime`

    プラットフォーム依存:

    - Unix ではメタデータの最終更新時刻

    - Windows では作成時刻、単位は秒

  `st_atime_ns`

    ナノ秒 (整数) で表した最終アクセス時刻。

  `st_mtime_ns`

    ナノ秒 (整数) で表した最終内容更新時刻。

  `st_ctime_ns`

    プラットフォーム依存:

    - Unix ではメタデータの最終更新時刻

    - Windows で、ナノ秒 (整数) で表した作成時刻。

  `stat_float_times()` 関数も参照してください。

  注釈

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

  同じように、`st_atime_ns`、`st_mtime_ns`、および `st_ctime_ns` は常にナノ秒で表されますが、多くのシステムではナノ秒単位の精度では提供していません。ナノ秒単位の精度を提供するシステムであっても、`st_atime`、`st_mtime`、および `st_ctime` についてはそれらが格納される浮動小数点オブジェクトがそのすべてを保持できず、それ自体が少々不正確です。正確なタイムスタンプが必要な場合は、`st_atime_ns`、`st_mtime_ns`、および `st_ctime_ns` を使用するべきです。

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

  `st_blocks`

    ファイルに対して割り当てられている 512 バイトのブロックの数です。ファイルにホール (hole) が含まれている場合、`st_size`/512 より小さくなる場合があります。

  `st_blksize`

    効率的なファイルシステム I/O のための「推奨される」ブロックサイズです。ファイルに、これより小さいチャンクで書き込むと、非効率的な読み込み、編集、再書き込みが起こる場合があります。

  `st_rdev`

    inode デバイスの場合デバイスタイプ

  `st_flags`

    ファイルのユーザ定義フラグ

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

  `st_gen`

    ファイル生成番号

  `st_birthtime`

    ファイル作成時刻

  Mac OS システムでは、以下の属性も利用できる場合があります:

  `st_rsize`

    ファイルの実際のサイズ

  `st_creator`

    ファイルの作成者

  `st_type`

    ファイルタイプ

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

  `st_file_attributes`

    Windows のファイルの属性。`GetFileInformationByHandle()` の返す `BY_HANDLE_FILE_INFORMATION` 構造の `dwFileAttributes` メンバーです。`stat` モジュールの `FILE_ATTRIBUTE_*` 定数を参照してください。

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

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

  バージョン 3.3 で追加: `st_atime_ns`、`st_mtime_ns`、`st_ctime_ns` メンバが追加されました。

  バージョン 3.5 で追加: Windows において `st_file_attributes` メンバが追加されました。

  バージョン 3.5 で変更: Windows now returns the file index as `st_ino` when available.

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

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

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

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

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

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

  バージョン 3.3 で非推奨.

`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` 。

  `f_flag` 属性のビットフラグ用に 2 つのモジュールレベル定数が定義されています: `ST_RDONLY` が設定されるとファイルシステムは読み出し専用でマウントされ、`ST_NOSUID` が設定されると setuid/setgid ビットの動作は無効になるか、サポートされません。

  GNU/glibc ベースのシステム用に、追加のモジュールレベルの定数が次のように定義されています。 `ST_NODEV` (デバイス特殊ファイルへのアクセスを許可しない) 、 `ST_NOEXEC` (プログラムの実行を許可しない) 、 `ST_SYNCHRONOUS` (書き込みが一度に同期される) 、`ST_MANDLOCK` (ファイルシステムで強制的なロックを許可する) 、 `ST_WRITE` (ファイル/ディレクトリ/シンボリックリンクに書き込む) 、 `ST_APPEND` (追記のみのファイル) 、`ST_IMMUTABLE` (変更不能なファイル) 、 `ST_NOATIME` (アクセス時刻を更新しない) 、`ST_NODIRATIME` (ディレクトリアクセス時刻を更新しない) 、`ST_RELATIME` (mtime/ctimeに対して相対的に atime を更新する)。

  この関数は ファイル記述子の指定 をサポートしています。

  利用できる環境 : Unix 。

  バージョン 3.2 で変更: 定数 `ST_RDONLY` および `ST_NOSUID` が追加されました。

  バージョン 3.3 で追加: path にオープンしているファイル記述子の指定をサポートしました。

  バージョン 3.4 で変更: `ST_NODEV`, `ST_NOEXEC`, `ST_SYNCHRONOUS`, `ST_MANDLOCK`, `ST_WRITE`, `ST_APPEND`, `ST_IMMUTABLE`, `ST_NOATIME`, `ST_NODIRATIME`, `ST_RELATIME` 定数が追加されました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``supports_dir_fd`

  `os` モジュールのどの関数が dir_fd 引数の使用を許可するかを示す、`Set` オブジェクト。異なるプラットフォームでは、異なる機能を持ち、あるプラットフォームで動作するオプションが、別のプラットフォームでは動作しない場合があります。一貫性を保つため、 dir_fd をサポートする関数は常に引数の指定を許可しますが、機能が実際に使用できない場合には、例外を送出します。

  特定の関数が dir_fd 引数の使用を許可しているかどうか確認するには、`supports_dir_fd` と `in` 演算子で比較します。例えば、以下の式では `os.stat()` の dir_fd 引数がローカルシステム上で利用できるかどうか確認できます:

      os.stat in os.supports_dir_fd

  現在 dir_fd 引数は Unix プラットフォームでのみ動作します。Windows で動作する関数はありません。

  バージョン 3.3 で追加.

`os.``supports_effective_ids`

  `os` モジュールのどの関数が `os.access()` の effective_ids 引数の使用を許可するかを示す、`Set` オブジェクト。ローカルプラットフォームでサポートされている場合、このコレクションは `os.access()` を含みます。サポートされていない場合、空になります。

  `os.access()` で effective_ids 引数が使用できるかどうか確認するには、以下のように `supports_effective_ids` に `in` 演算子を使用します:

      os.access in os.supports_effective_ids

  現在 effective_ids は Unix プラットフォームでのみが動作します。Windows では動作しません。

  バージョン 3.3 で追加.

`os.``supports_fd`

  `os` モジュールのどの関数が、path 引数をオープンしているファイル記述子として指定するかを示す、`Set` オブジェクト。異なるプラットフォームでは、異なる機能を持ち、あるプラットフォームで動作するオプションが、別のプラットフォームでは動作しない場合があります。一貫性を保つため、 fd をサポートする関数は常に引数の指定を許可しますが、機能が実際に使用できない場合には、例外を送出します。

  特定の関数が path 引数にオープンしているファイル記述子の指定を許可しているかどうか確認するには、`supports_fd` に `in` 演算子を使用します。例えば、以下の式では `os.chdir()` がローカルプラットフォーム上で呼び出された時にオープンしているファイル記述子を受け付けるかどうか確認できます:

      os.chdir in os.supports_fd

  バージョン 3.3 で追加.

`os.``supports_follow_symlinks`

  `os` モジュールのどの関数が follow_symlinks 引数の使用を許可するかを示す、`Set` オブジェクト。異なるプラットフォームでは、異なる機能を持ち、あるプラットフォームで動作するオプションが、別のプラットフォームでは動作しない場合があります。一貫性を保つため、 follow_symlinks をサポートする関数は常に引数の指定を許可しますが、機能が実際に使用できない場合には、例外を送出します。

  特定の関数が follow_symlinks 引数をサポートしているかどうか確認するには、`supports_follow_symlinks` に `in` 演算子を使用します。例えば、以下の式では `os.stat()` がローカルシステム上で follow_symlinks 引数を利用できるかどうか確認できます:

      os.stat in os.supports_follow_symlinks

  バージョン 3.3 で追加.

`os.``symlink`(src, dst, target_is_directory=False, *, dir_fd=None)

  src を指し示すシンボリックリンク dst を作成します。

  On Windows, a symlink represents either a file or a directory, and does not morph to the target dynamically. If the target is present, the type of the symlink will be created to match. Otherwise, the symlink will be created as a directory if target_is_directory is `True` or a file symlink (the default) otherwise. On non-Windows platforms, target_is_directory is ignored.

  シンボリックリンクのサポートは Windows 6.0 (Vista) から導入されました。Windows がそれより古い場合 `symlink()` は `NotImplementedError` を送出します。

  この関数は ディレクトリ記述子への相対パス をサポートしています。

  注釈

  Windowsでは、シンボリックリンクを作成するには特権 SeCreateSymbolicLinkPrivilege が必要です。この特権は通常一般ユーザーには与えられていませんが、管理者レベルに特権をエスカレートしたアカウントで利用できます。この特権を取得するか、アプリケーションを管理者として実行すると、シンボリックリンクを作成することができます。

  この関数が特権を持たないユーザーに呼び出されると、`OSError` が送出されます。

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

  バージョン 3.2 で変更: Windows 6.0 (Vista) のシンボリックリンクをサポートしました。

  バージョン 3.3 で追加: 引数 dir_fd が追加され、非 Windows プラットフォームでの target_is_directory 指定がサポートされました。

  バージョン 3.6 で変更: src と dst が path-like object を受け付けるようになりました。

`os.``sync`()

  ディスクキャッシュのディスクへの書き出しを強制します。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``truncate`(path, length)

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

  この関数は ファイル記述子の指定 をサポートしています。

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

  バージョン 3.3 で追加.

  バージョン 3.5 で変更: Windows サポートを追加しました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``unlink`(path, *, dir_fd=None)

  ファイル path を削除します。意味上は `remove()` と等価です。 `unlink` の名前は伝統的な Unix の関数名です。詳細は `remove()` のドキュメントを参照してください。

  バージョン 3.3 で追加: 引数 dir_fd が追加されました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``utime`(path, times=None, *, [ns, ]dir_fd=None, follow_symlinks=True)

  path で指定されたファイルに最終アクセス時刻および最終修正時刻を設定します。

  `utime()` は 2 つの任意引数 times と ns をとります。これらは path に設定する時刻を指定し、以下のように使用されます:

  - ns を指定する場合、ナノ秒を表す整数値をメンバーとして使用して、 `(atime_ns, mtime_ns)` の形式の 2 要素タプルを指定する必要があります。

  - times が `None` ではない場合、`(atime, mtime)` の形式で各メンバーは単位を秒で表す整数か浮動小数点値のタプルを指定しなければなりません。

  - times が `None` で、 ns が指定されていない場合、これは両方の時間を現在時刻として `ns=(atime_ns, mtime_ns)` を指定することと等価です。

  times と ns の両方にタプルが指定されるとエラーになります。

  path にディレクトリを指定できるかどうかは、オペレーティングシステムがディレクトリをファイルとして実装しているかどうかによります (例えば Windows はそうではありません)。ここで設定した時刻が、後に `stat()` の呼び出し時正確に返されない場合があります。これはオペレーティングシステムが記録するアクセスおよび修正時刻の精度に依存しています; `stat()` を参照してください。正確な時刻を保持する最善の方法は、utime で ns 引数を指定し、`os.stat()` の返り値オブジェクトから st_atime_ns および st_mtime_ns フィールドを使用することです。

  この関数は ファイル記述子の指定 、 ディレクトリ記述子への相対パス 、および シンボリックリンクをたどらない をサポートしています。

  バージョン 3.3 で追加: path にオープンしているファイル記述子の指定がサポートされ、引数 dir_fd、follow_symlinks、および ns が追加されました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`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 内のディレクトリの情報が生成されるからです。

  By default, errors from the `scandir()` call are ignored. If optional argument onerror is specified, it should be a function; it will be called with one argument, an `OSError` instance. It can report the error to continue with the walk, or raise the exception to abort the walk. Note that the filename is available as the `filename` attribute of the exception object.

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

  注釈

  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", end=" ")
          print(sum(getsize(join(root, name)) for name in files), end=" ")
          print("bytes in", len(files), "non-directory files")
          if 'CVS' in dirs:
              dirs.remove('CVS')  # don't visit CVS directories

  次の例 (`shutil.rmtree()` の単純な実装) では、ツリーをボトムアップで走査することが不可欠になります; `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))

  バージョン 3.5 で変更: この関数は、今では `os.listdir()` ではなく `os.scandir()` を呼び出します。これにより、 `os.stat()` の呼び出し回数を削減でき、動作が高速化します。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``fwalk`(top='.', topdown=True, onerror=None, *, follow_symlinks=False, dir_fd=None)

  挙動は `walk()` と同じですが、`dir_fd` をサポートし、タプル `(dirpath, dirnames, filenames, dirfd)` を yield します。

  dirpath、dirnames、および filenames は `walk()` の出力と同じで、dirfd は dirpath を参照するファイル記述子です。

  この関数は常に ディレクトリ記述子への相対パス および シンボリックリンクをたどらない をサポートしています。ただし、他の関数と異なり、`fwalk()` での follow_symlinks のデフォルト値は `False` になることに注意してください。

  注釈

  `fwalk()` はファイル記述子を yield するため、それらが有効なのは次のイテレートステップまでです。それ以後も保持したい場合は `dup()` などを使って複製して使用してください。

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

      import os
      for root, dirs, files, rootfd in os.fwalk('python/Lib/email'):
          print(root, "consumes", end="")
          print(sum([os.stat(name, dir_fd=rootfd).st_size for name in files]),
                end="")
          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, rootfd in os.fwalk(top, topdown=False):
          for name in files:
              os.unlink(name, dir_fd=rootfd)
          for name in dirs:
              os.rmdir(name, dir_fd=rootfd)

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

### 16.1.5.1. Linux 拡張属性

バージョン 3.3 で追加.

以下の関数はすべて Linux でのみ使用可能です。

`os.``getxattr`(path, attribute, *, follow_symlinks=True)

  Return the value of the extended filesystem attribute attribute for path. attribute can be bytes or str (directly or indirectly through the `PathLike` interface). If it is str, it is encoded with the filesystem encoding.

  この関数は ファイル記述子の指定 および シンボリックリンクをたどらない をサポートしています。

  バージョン 3.6 で変更: path と attribute が path-like object を受け付けるようになりました。

`os.``listxattr`(path=None, *, follow_symlinks=True)

  path の拡張ファイルシステム属性のリストを返します。リスト内の属性はファイルシステムのエンコーディングでデコードされた文字列で表されます。path が `None` の場合、`listxattr()` はカレントディレクトリを調べます。

  この関数は ファイル記述子の指定 および シンボリックリンクをたどらない をサポートしています。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``removexattr`(path, attribute, *, follow_symlinks=True)

  Removes the extended filesystem attribute attribute from path. attribute should be bytes or str (directly or indirectly through the `PathLike` interface). If it is a string, it is encoded with the filesystem encoding.

  この関数は ファイル記述子の指定 および シンボリックリンクをたどらない をサポートしています。

  バージョン 3.6 で変更: path と attribute が path-like object を受け付けるようになりました。

`os.``setxattr`(path, attribute, value, flags=0, *, follow_symlinks=True)

  Set the extended filesystem attribute attribute on path to value. attribute must be a bytes or str with no embedded NULs (directly or indirectly through the `PathLike` interface). If it is a str, it is encoded with the filesystem encoding. flags may be `XATTR_REPLACE` or `XATTR_CREATE`. If `XATTR_REPLACE` is given and the attribute does not exist, `EEXISTS` will be raised. If `XATTR_CREATE` is given and the attribute already exists, the attribute will not be created and `ENODATA` will be raised.

  この関数は ファイル記述子の指定 および シンボリックリンクをたどらない をサポートしています。

  注釈

  Linux カーネル 2.6.39 以前では、バグのため一部のファイルシステムで引数 flags が無視されます。

  バージョン 3.6 で変更: path と attribute が path-like object を受け付けるようになりました。

`os.``XATTR_SIZE_MAX`

  拡張属性の値にできる最大サイズです。現在、Linux では 64 キロバイトです。

`os.``XATTR_CREATE`

  `setxattr()` の引数 flags に指定できる値です。その操作で属性を作成しなければならないことを意味します。

`os.``XATTR_REPLACE`

  `setxattr()` の引数 flags に指定できる値です。その操作で既存の属性を置き換えなければならないことを意味します。

## 16.1.6. プロセス管理

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

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

`os.``abort`()

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

`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()` では、すべて新たなプロセスは現在のプロセスの環境を引き継ぎます。

  一部のプラットフォームの `execve()` では、path はオープンしているファイル記述子で指定することもできます。この機能をサポートしていないプラットフォームもあります; `os.supports_fd` を使うことで利用可能かどうか調べることができます。利用できない場合、`NotImplementedError` が送出されます。

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

  バージョン 3.3 で追加: `execve()` において、path へのオープンしているファイル記述子の指定のサポートを追加しました。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

`os.``_exit`(n)

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

  注釈

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

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

注釈

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

`os.``EX_OK`

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

  利用できる環境 : Unix 。

`os.``EX_USAGE`

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

  利用できる環境 : Unix 。

`os.``EX_DATAERR`

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

  利用できる環境 : Unix 。

`os.``EX_NOINPUT`

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

  利用できる環境 : Unix 。

`os.``EX_NOUSER`

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

  利用できる環境 : Unix 。

`os.``EX_NOHOST`

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

  利用できる環境 : Unix 。

`os.``EX_UNAVAILABLE`

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

  利用できる環境 : Unix 。

`os.``EX_SOFTWARE`

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

  利用できる環境 : Unix 。

`os.``EX_OSERR`

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

  利用できる環境 : Unix 。

`os.``EX_OSFILE`

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

  利用できる環境 : Unix 。

`os.``EX_CANTCREAT`

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

  利用できる環境 : Unix 。

`os.``EX_IOERR`

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

  利用できる環境 : Unix 。

`os.``EX_TEMPFAIL`

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

  利用できる環境 : Unix 。

`os.``EX_PROTOCOL`

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

  利用できる環境 : Unix 。

`os.``EX_NOPERM`

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

  利用できる環境 : Unix 。

`os.``EX_CONFIG`

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

  利用できる環境 : Unix 。

`os.``EX_NOTFOUND`

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

  利用できる環境 : Unix 。

`os.``fork`()

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

  FreeBSD 6.3 以下、Cygwinを含む一部のプラットフォームにおいて、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 するプロセスのハンドルも受け取ります。

  `signal.pthread_kill()` も参照してください。

  バージョン 3.2 で追加: Windows をサポートしました。

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

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

  利用できる環境 : Unix 。

`os.``nice`(increment)

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

  利用できる環境 : Unix 。

`os.``plock`(op)

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

  利用できる環境 : Unix 。

`os.``popen`(cmd, mode='r', buffering=-1)

  コマンド cmd への、または cmd からのパイプ入出力を開きます。戻り値はパイプに接続されている開かれたファイルオブジェクトで、 mode が `'r'` (デフォルト) または `'w'` かによって読み出しまたは書き込みを行うことができます。引数 bufsize は、組み込み関数 `open()` における対応する引数と同じ意味を持ちます。 返されるファイルオブジェクトは、バイトではなくテキスト文字列を読み書きします。

  `close` メソッドは、サブプロセスが正常に終了した場合は `None` を返し、エラーが発生した場合にはサブプロセスの返りコードを返します。POSIX システムでは、返りコードが正の場合、そのコードは1バイト左にシフトしてプロセスが終了したことを示します。返りコードが負の場合、プロセスは返りコードの符号を変えた信号により終了します 。 (例えば、サブプロセスが kill された場合、返り値は `- signal.SIGKILL` となる場合があります。) Windows システムでは、返り値には子プロセスからの符号のついた整数の返りコードを含まれます。

  これは、`subprocess.Popen` を使用して実装されています。サブプロセスを管理し、サブプロセスと通信を行うためのより強力な方法については、クラスのドキュメンテーションを参照してください。

`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` モジュールの利用を推奨します。

  バージョン 3.6 で変更: path-like object を受け入れるようになりました。

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

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

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

`os.``P_WAIT`

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

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

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

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

  利用できる環境 : Windows.

`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 用に正しくコード化されたパスになるようにしてください。

  インタープリタの起動時のオーバーヘッドを削減するため、この関数が最初に呼ばれるまで、Win32 `ShellExecute()` 関数は決定されません。関数を決定できない場合、 `NotImplementedError` が送出されます。

  利用できる環境 : Windows.

`os.``system`(command)

  サブシェル内でコマンド (文字列) を実行します。この関数は標準 C 関数 `system()` を使って実装されており、`system()` と同じ制限があります。`sys.stdin` などに対する変更を行っても、実行されるコマンドの環境には反映されません。command が何らかの出力を生成した場合、インタープリターの標準出力ストリームに送られます。

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

  Windows では、返り値は command を実行した後にシステムシェルから返される値です。シェルは通常 cmd.exe であり、返す値は実行したコマンドの終了ステータスになります。シェルの種類は Windows の環境変数 `COMSPEC`: に指定されています。ネイティブでないシェルを使用している場合は、そのドキュメントを参照してください。

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

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

`os.``times`()

  現在の全体的なプロセス時間を返します。返り値は 5 個の属性を持つオブジェクトになります:

  - `user` - ユーザー時間

  - `system` - システム時間

  - `children_user` - すべての子プロセスのユーザー時間

  - `children_system` - すべての子プロセスのシステム時間

  - `elapsed` - 去のある固定時点からの経過実時間

  後方互換性のため、このオブジェクトは 5 個のアイテム `user` 、 `system` 、 `children_user` 、 `children_system` 、および `elapsed` を持つタプルのようにも振る舞います。

  times(2) の Unix マニュアルページ、または対応する Windows プラットフォーム API ドキュメントを参照してください。Windows では、`user` および `system` のみ有効で、その他の属性にはゼロが入ります。

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

  バージョン 3.3 で変更: 返り値の型が、タプルから属性名のついたタプルライクオブジェクトに変更されました。

`os.``wait`()

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

  利用できる環境 : Unix 。

`os.``waitid`(idtype, id, options)

  一つ以上のプロセスの完了を待機します。idtype には `P_PID`、`P_PGID`、または `P_ALL` を指定できます。id は待機する pid を指定します。options は `WEXITED`、`WSTOPPED`、または `WCONTINUED` を一つ以上、論理和で指定でき、他に `WNOHANG` または `WNOWAIT` も追加できます。返り値は `siginfo_t` 構造体に含まれるデータ (`si_pid`、`si_uid`、`si_signo`、`si_status`、および `si_code`) を表すオブジェクトになります。`WNOHANG` が指定され、待機状態の子プロセスがない場合は `None` を返します。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``P_PID`
`os.``P_PGID`
`os.``P_ALL`

  `waitid()` の idtype に指定できる値です。これらは id がどう解釈されるかに影響します。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``WEXITED`
`os.``WSTOPPED`
`os.``WNOWAIT`

  `waitid()` の options で使用できるフラグです。子プロセスのどのシグナルを待機するかを指定します。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`os.``CLD_EXITED`
`os.``CLD_DUMPED`
`os.``CLD_TRAPPED`
`os.``CLD_CONTINUED`

  `waitid()` の返り値の `si_code` に設定され得る値です。

  利用できる環境 : Unix 。

  バージョン 3.3 で追加.

`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` と共に呼び出した場合、適切なプロセスハンドルが返されます。

  バージョン 3.5 で変更: システムコールが中断されシグナルハンドラが例外を送出しなかった場合、この関数は `InterruptedError` 例外を送出する代わりにシステムコールを再試行するようになりました (論拠については PEP 475 を参照してください)。

`os.``wait3`(options)

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

  利用できる環境 : Unix 。

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

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

  利用できる環境 : Unix 。

`os.``WNOHANG`

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

  利用できる環境 : Unix 。

`os.``WCONTINUED`

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

  利用できる環境: 一部の Unix システム。

`os.``WUNTRACED`

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

  利用できる環境 : Unix 。

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

`os.``WCOREDUMP`(status)

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

  利用できる環境 : Unix 。

`os.``WIFCONTINUED`(status)

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

  利用できる環境 : Unix 。

`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 。

## 16.1.7. スケジューラーへのインターフェイス

以下の関数は、オペレーティングシステムがプロセスに CPU 時間を割り当てる方法を制御します。これらは一部の Unix プラットフォームでのみ利用可能です。詳しくは Unix マニュアルページを参照してください。

バージョン 3.3 で追加.

次のスケジューリングポリシーは、オペレーティングシステムでサポートされていれば公開されます。

`os.``SCHED_OTHER`

  デフォルトのスケジューリングポリシーです。

`os.``SCHED_BATCH`

  常にCPUに負荷のかかる (CPU-intensive) プロセス用のポリシーです。他の対話式プロセスなどの応答性を維持するよう試みます。

`os.``SCHED_IDLE`

  非常に優先度の低いバックグラウンドタスク用のスケジューリングポリシーです。

`os.``SCHED_SPORADIC`

  散発的なサーバープログラム用のスケジューリングポリシーです。

`os.``SCHED_FIFO`

  FIFO (First In, First Out) 型のスケジューリングポリシーです。

`os.``SCHED_RR`

  ラウンドロビン型のスケジューリングポリシーです。

`os.``SCHED_RESET_ON_FORK`

  このフラグは他のスケジューリングポリシーとともに論理和指定できます。このフラグが与えられたプロセスが fork されると、その子プロセスのスケジューリングポリシーおよび優先度はデフォルトにリセットされます。

class `os.``sched_param`(sched_priority)

  このクラスは、`sched_setparam()`、`sched_setscheduler()`、および `sched_getparam()` で使用される、調節可能なスケジューリングパラメーターを表します。これはイミュータブルです。

  現在、一つの引数のみ指定できます:

  `sched_priority`

    スケジューリングポリシーのスケジューリング優先度です。

`os.``sched_get_priority_min`(policy)

  policy の最小優先度値を取得します。policy には上記のスケジューリングポリシー定数の一つを指定します。

`os.``sched_get_priority_max`(policy)

  policy の最大優先度値を取得します。policy には上記のスケジューリングポリシー定数の一つを指定します。

`os.``sched_setscheduler`(pid, policy, param)

  PID pid のプロセスのスケジューリングポリシーを設定します。pid が 0 の場合、呼び出しプロセスを意味します。policy には上記のスケジューリングポリシー定数の一つを指定します。param は `sched_param` のインスタンスです。

`os.``sched_getscheduler`(pid)

  PID pid のプロセスのスケジューリングポリシーを返します。pid が 0 の場合、呼び出しプロセスを意味します。返り値は上記のスケジューリングポリシー定数の一つになります。

`os.``sched_setparam`(pid, param)

  PID pid のプロセスのスケジュールパラメーターを設定します。pid が 0 の場合、呼び出しプロセスを意味します。param は `sched_param` のインスタンスです。

`os.``sched_getparam`(pid)

  PID pid のプロセスのスケジューリングパラメーターを `sched_param` のインスタンスとして返します。pid が 0 の場合、呼び出しプロセスを意味します。

`os.``sched_rr_get_interval`(pid)

  PID pid のプロセスのラウンドロビンクォンタム (秒) を返します。pid が 0 の場合、呼び出しプロセスを意味します。

`os.``sched_yield`()

  自発的に CPU を解放します。

`os.``sched_setaffinity`(pid, mask)

  PID pid のプロセス (0 であれば現在のプロセス) を CPU の集合に制限します。mask はプロセスを制限する CPU の集合を表す整数のイテラブルなオブジェクトです。

`os.``sched_getaffinity`(pid)

  PID pid のプロセス (0 の場合、現在のプロセス) が制限されている CPU の集合を返します。

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

`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.``cpu_count`()

  システムの CPU 数を返します。未定の場合は `None` を返します。

  この数は現在のプロセスが使える CPU 数と同じものではありません。 使用可能な CPU 数は `len(os.sched_getaffinity(0))` で取得できます。

  バージョン 3.4 で追加.

`os.``getloadavg`()

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

  利用できる環境 : Unix 。

`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` からも利用できます。

`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` からも利用できます。

`os.``RTLD_LAZY`
`os.``RTLD_NOW`
`os.``RTLD_GLOBAL`
`os.``RTLD_LOCAL`
`os.``RTLD_NODELETE`
`os.``RTLD_NOLOAD`
`os.``RTLD_DEEPBIND`

  `setdlopenflags()` 関数と `getdlopenflags()` 関数と一緒に使用するフラグ。それぞれのフラグの意味については、Unix マニュアルの dlopen(3) ページを参照してください。

  バージョン 3.3 で追加.

## 16.1.9. 乱数

`os.``getrandom`(size, flags=0)

  最大で size バイトからなるランダムなバイト列を返します。この関数は要求されたバイト数よりも少ないバイト数を返すことがあります。

  バイト列は、ユーザー空間の乱数生成器や暗号目的ののシードとして利用できます。

  `getrandom()` はデバイスドライバや他の環境ノイズ源から収集されたエントロピーに頼っています。不必要な大量のデータの読出しは、`/dev/random` と `/dev/urandom` デバイスの他のユーザーに負の影響を与えるでしょう。

  The flags argument is a bit mask that can contain zero or more of the following values ORed together: `os.GRND_RANDOM` and `GRND_NONBLOCK`.

  Linux getrandom() manual page も参照してください。

  利用できる環境: Linux 3.17 以降。

  バージョン 3.6 で追加.

`os.``urandom`(size)

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

  この関数は OS 固有の乱数発生源からランダムなバイト列を生成して返します。この関数の返すデータは暗号を用いたアプリケーションで十分利用できる程度に予測不能ですが、実際のクオリティは OS の実装によって異なります。

  On Linux, if the `getrandom()` syscall is available, it is used in blocking mode: block until the system urandom entropy pool is initialized (128 bits of entropy are collected by the kernel). See the PEP 524 for the rationale. On Linux, the `getrandom()` function can be used to get random bytes in non-blocking mode (using the `GRND_NONBLOCK` flag) or to poll until the system urandom entropy pool is initialized.

  On a Unix-like system, random bytes are read from the `/dev/urandom` device. If the `/dev/urandom` device is not available or not readable, the `NotImplementedError` exception is raised.

  Windowsで、 `CryptGenRandom()` を使用します。

  参考

  The `secrets` module provides higher level functions. For an easy-to-use interface to the random number generator provided by your platform, please see `random.SystemRandom`.

  バージョン 3.6.0 で変更: Linuxで、 セキュリティを高めるために、`getrandom()` をブロッキングモードで使用するようになりました。

  バージョン 3.5.2 で変更: Linux において、 `getrandom()` システムコールがブロックするなら (urandom エントロピープールが初期化されていなければ) 、 `/dev/urandom` を読む方法にフォールバックします。

  バージョン 3.5 で変更: Linux 3.17 以降では、使用可能な場合に `getrandom()` システムコールが使用されるようになりました。OpenBSD 5.6 以降では、C `getentropy()` 関数が使用されるようになりました。これらの関数は、内部ファイル記述子を使用しません。

`os.``GRND_NONBLOCK`

  By default, when reading from `/dev/random`, `getrandom()` blocks if no random bytes are available, and when reading from `/dev/urandom`, it blocks if the entropy pool has not yet been initialized.

  If the `GRND_NONBLOCK` flag is set, then `getrandom()` does not block in these cases, but instead immediately raises `BlockingIOError`.

  バージョン 3.6 で追加.

`os.``GRND_RANDOM`

  If this bit is set, then random bytes are drawn from the `/dev/random` pool instead of the `/dev/urandom` pool.

  バージョン 3.6 で追加.