目次

前のトピックへ

16. 汎用オペレーティングシステムサービス

次のトピックへ

16.2. io — ストリームを扱うコアツール

このページ

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

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

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

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

ノート

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

ノート

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

exception os.error

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

os.name

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

16.1.1. プロセスのパラメタ

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

os.environ

環境変数の値を表すマップ型オブジェクトです。例えば、 environ['HOME'] は( いくつかのプラットフォーム上での) あなたの ホームディレクトリへのパスです。これは C の getenv("HOME") と等価です。

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

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

ノート

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

ノート

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

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

プラットフォームが unsetenv() 関数をサポートしているならば、このマッピングからアイテムを取り除いて(delete)環境変数を消すことができます。 unsetenv()os.environ からアイテムが取り除かれた時に自動的に呼ばれます。 pop()clear() が呼ばれた時も同様です。

バージョン 2.6 で変更.

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

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

os.ctermid()

プロセスの制御端末に対応するファイル名を返します。利用できる環境: Unix。

os.getegid()

現在のプロセスの実効(effective)実行グループ id を返します。この id は現在のプロセスで実行されているファイルの “set id” ビットに対応します。 利用できる環境: Unix。

os.geteuid()

現在のプロセスの実効(effective)実行ユーザ id を返します。利用できる環境: Unix。

os.getgid()

現在のプロセスの実際のグループ id を返します。利用できる環境: Unix。

os.getgroups()

現在のプロセスに関連づけられた従属グループ id のリストを返します。利用できる環境: Unix。

os.getlogin()

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

os.getpgrp()

現在のプロセス・グループの id を返します。利用できる環境: Unix。

os.getpid()

現在のプロセス id を返します。利用できる環境: Unix、 Windows。

os.getppid()

親プロセスの id を返します。利用できる環境: Unix。

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 で追加.

os.setpgrp()

システムコール setpgrp() または setpgrp(0, 0)() のどちらかのバージョンのうち、 (実装されていれば) 実装されている方を呼び出します。機能については Unix マニュアルを参照してください。利用できる環境: Unix

os.setpgid(pid, pgrp)

システムコール setpgid() を呼び出して、 pid の id をもつプロセスのプロセスグループ id を pgrp に設定します。 利用できる環境: Unix

os.setreuid(ruid, euid)

現在のプロセスに対して実際のユーザ id および実行ユーザ id を設定します。利用できる環境: Unix

os.setregid(rgid, egid)

現在のプロセスに対して実際のグループ 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() で開始されるサブプロセスに影響を与えます。利用できる環境: ほとんどの Unix互換環境、Windows

unsetenv() がサポートされている時には os.environ のアイテムの削除が対応する unsetenv() の呼び出しに自動的に翻訳されます。しかし、 unsetenv() の呼び出しは os.environ を更新しませんので、むしろ os.environ のアイテムを削除する方が好ましい方法です。

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

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

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

ファイル記述子 fd に接続している、開かれたファイルオブジェクトを返します。引数 mode および bufsize は、組み込み関数 open() における対応する引数と同じ意味を持ちます。利用できる環境: 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 で撤廃: .. This function is obsolete. Use the subprocess module. Check especially the 古い関数を subprocess モジュールで置き換える section.

この関数は撤廃されました。代わりに subprocess モジュールを利用してください。 特に、 古い関数を subprocess モジュールで置き換える 節をチェックしてください。

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

os.tmpfile()

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

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

バージョン 2.6 で撤廃: .. All of the popen*() functions are obsolete. Use the subprocess module. 全ての 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 で撤廃: .. This function is obsolete. Use the subprocess module. Check especially the 古い関数を subprocess モジュールで置き換える section. この関数は撤廃されました。 subprocess モジュールを利用してください。 特に、 古い関数を subprocess モジュールで置き換える 節を参照してください。

利用できる環境: Unix、Windows

バージョン 2.0 で追加.

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

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

バージョン 2.6 で撤廃: .. This function is obsolete. Use the subprocess module. Check especially the 古い関数を subprocess モジュールで置き換える section. この関数は撤廃されました。 subprocess モジュールを利用してください。 特に、 古い関数を subprocess モジュールで置き換える 節を参照してください。

利用できる環境: Unix、Windows

バージョン 2.0 で追加.

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

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

バージョン 2.6 で撤廃: .. This function is obsolete. Use the subprocess module. Check especially the 古い関数を subprocess モジュールで置き換える section. この関数は撤廃されました。 subprocess モジュールを利用してください。 特に、 古い関数を subprocess モジュールで置き換える 節を参照してください。

利用できる環境: Unix、Windows

バージョン 2.0 で追加.

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

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

16.1.3. ファイル記述子の操作

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

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

os.close(fd)

ファイルディスクリプタ fd を閉じます。利用できる環境: Unix、 Windows

ノート

注:この関数は低レベルの I/O のためのもので、 open()pipe() が返すファイル記述子に対して適用しなければ なりません。組み込み関数 open()popen(), fdopen() の返す “ファイルオブジェクト” を閉じるには、オブジェクトの close() メソッドを使ってください。

os.closerange(fd_low, fd_high)

fd_low (を含む) から fd_high (含まない) までの全てのディスクリプタを、エラーを無視しながら閉じる。

利用できる環境: Unix、Windows

次のコードと等価です:

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

バージョン 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 を、 uidgid に変更する。 どちらかの id を変更しない場合は、 -1 を渡してください。 利用できる環境: Unix

バージョン 2.6 で追加.

os.fdatasync(fd)

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

os.fpathconf(fd, name)

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

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

os.fstat(fd)

stat() のようにファイル記述子 fd の状態を返します。 利用できる環境: Unix、Windows

os.fstatvfs(fd)

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

os.fsync(fd)

ファイル記述子 fd を持つファイルのディスクへの書き込みを強制します。 Unixでは、ネイティブの fsync() 関数を、Windows では MS _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(のような)装置に接続されている場合、 1 を返します。そうでない場合は 0 を返します。 利用できる環境: Unix

os.lseek(fd, pos, how)

ファイル記述子 fd の現在の位置を pos に設定します。 pos の意味は how で修飾されます: ファイルの先頭からの相対には SEEK_SET0 を設定します; 現在の位置からの相対には SEEK_CUR1 を設定します; ファイルの末尾からの相対には SEEK_END2 を設定します。 利用できる環境: Unix、Windows

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

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

フラグとファイルモードの値についての詳細は C ランタイムのドキュメントを参照してください; (O_RDONLYO_WRONLY のような) フラグ定数はこのモジュールでも定義されています (以下を参照してください)。

ノート

この関数は低レベルの 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 のためのもので、 open()pipe() が返すファイル記述子に対して適用しなければなりません。 組み込み関数 open()popen(), fdopen() の返す “ファイルオブジェクト” 、あるいは :data:sys.stdin から読み出すには、オブジェクトの read()readline() メソッドを使ってください。

os.tcgetpgrp(fd)

fd (open() が返す開かれたファイル記述子) で与えられる端末に関連付けられたプロセスグループを返します。 利用できる環境: Unix

os.tcsetpgrp(fd, pg)

fd (open() が返す開かれたファイル記述子) で与えられる端末に関連付けられたプロセスグループを pg に設定します。 利用できる環境: Unix

os.ttyname(fd)

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

os.write(fd, str)

ファイル記述子 fd に文字列 str を書き込みます。実際に書き込まれたバイト数を返します。 利用できる環境: Unix、Windows

ノート

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

以下の定数は open() 関数の flags 引数に利用します。 これらの定数は、ビット単位OR | で組み合わせることができます。 幾つかの定数は、全てのプラットフォームで使えるわけではありません。 利用可能かどうかや使い方については、 Unix では open(2), Windows では MSDN <http://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx> を参照してください。

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_SHLOCK
os.O_EXLOCK

利用できる環境: 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

これらの定数は GNU 拡張で、Cライブラリで定義されていない場合は利用できません。

os.SEEK_SET
os.SEEK_CUR
os.SEEK_END

lseek() 関数のパラメータです。値はそれぞれ 0, 1, 2 です。 利用できる環境: Windows、 Unix

バージョン 2.5 で追加.

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

os.access(path, mode)

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

ノート

access() を使ってユーザーが例えばファイルを開く権限を持っているか open() を使って実際にそうする前に調べることはセキュリティ・ホールを作り出してしまいます。というのは、調べる時点と開く時点の時間差を利用して そのユーザーがファイルを操作してしまうかもしれないからです。

ノート

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)

現在の作業ディレクトリ (current working directory) を path に設定します。 利用できる環境: Unix、Windows。

os.getcwd()

現在の作業ディレクトリを表現する文字列を返します。 利用できる環境: Unix、Windows。

os.getcwdu()

現在の作業ディレクトリを表現するユニコードオブジェクトを返します。 利用できる環境: Unix、 Windows

バージョン 2.3 で追加.

os.chflags(path, flags)

path のフラグを flags に変更する。 flags は、以下の値を(bitwise ORで)組み合わせたものです。 (stat モジュールを参照してください):

  • UF_NODUMP
  • UF_IMMUTABLE
  • UF_APPEND
  • UF_OPAQUE
  • UF_NOUNLINK
  • SF_ARCHIVED
  • SF_IMMUTABLE
  • SF_APPEND
  • SF_NOUNLINK
  • SF_SNAPSHOT

利用できる環境: Unix.

バージョン 2.6 で追加.

os.chroot(path)

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

バージョン 2.2 で追加.

os.chmod(path, mode)

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

  • 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_IWRITES_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.lchown(path, uid, gid)

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

バージョン 2.3 で追加.

src を指しているハードリンク dst を作成します。 利用できる環境: Unix

os.listdir(path)

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

バージョン 2.3 で変更: Windows NT/2k/XP と Unixでは、 path が Unicode オブジェクトの場合、Unicode オブジェクトのリストが返されます。

os.lstat(path)

stat() に似ていますが、シンボリックリンクをたどりません。 利用できる環境: Unix

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

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

バージョン 2.3 で追加.

os.major(device)

生のデバイス番号から、デバイスのメジャー番号を取り出します。(たいてい statst_dev フィールドか st_rdev フィールドです)

バージョン 2.3 で追加.

os.minor(device)

生のデバイス番号から、デバイスのマイナー番号を取り出します。(たいてい statst_dev フィールドか st_rdev フィールドです)

バージョン 2.3 で追加.

os.makedev(major, minor)

major と minor から、新しく生のデバイス番号を作ります。

バージョン 2.3 で追加.

os.mkdir(path[, mode])

数値で指定されたモード mode をもつディレクトリ path を作成します。 mode の標準の値は 0777 (8進)です。 システムによっては、 mode は無視されます。利用の際には、現在の umask 値が前もってマスクされます。 利用できる環境: Unix、Windows

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

os.makedirs(path[, mode])

再帰的なディレクトリ作成関数です。 mkdir() に似ていますが、末端 (leaf) となるディレクトリを作成するために必要な 中間の全てのディレクトリを作成します。末端ディレクトリがすでに存在する場合や、作成ができなかった場合には error 例外を送出します。 mode の標準の値は 0777 (8進)です。システムによっては、 mode は無視されます。利用の際には、現在の umask 値が前もってマスクされます。

ノート

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

バージョン 1.5.2 で追加.

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

os.pathconf(path, name)

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

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

os.pathconf_names

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

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

バージョン 2.6 で変更: .. If the path is a Unicode object the result will also be a Unicode object.

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)

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

os.renames(old, new)

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

バージョン 1.5.2 で追加.

ノート

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

os.rmdir(path)

ディレクトリ path を削除します。 利用できる環境: Unix、Windows。

os.stat(path)

与えられた path に対して stat() システムコールを実行します。戻り値はオブジェクトで、その属性が stat 構造体の以下に挙げる各メンバ: st_mode (保護モードビット)、 st_ino (i ノード番号)、 st_dev (デバイス)、 st_nlink (ハードリンク数)、 st_uid (所有者のユーザ ID)、 st_gid (所有者のグループ ID)、 st_size (ファイルのバイトサイズ)、 st_atime (最終アクセス時刻)、 st_mtime (最終更新時刻)、 st_ctime (プラットフォーム依存:Unixでは最終メタデータ変更時刻、 Windowsでは作成時刻) となっています。

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

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

(Linux のような) Unix システムでは、以下の属性: st_blocks (ファイル用にアロケーションされているブロック数)、 st_blksize (ファイルシステムのブロックサイズ)、 st_rdev (i ノードデバイスの場合、デバイスの形式)、 st_flags (ファイルに対するユーザー定義のフラグ) も利用可能なときがあります。

他の (FreeBSD のような) Unix システムでは、以下の属性: st_gen (ファイル生成番号)、 st_birthtime (ファイル生成時刻) も利用可能なときがあります (ただし root がそれらを使うことにした場合以外は値が入っていないでしょう)。

Mac OS システムでは、以下の属性: st_rsize, st_creator, st_type, も利用可能なときがあります。

RISCOS システムでは、以下の属性: st_ftype (file type)、 st_attrs (attributes)、 st_obtype (object type)、も利用可能なときがあります。

後方互換性のために、 stat() の戻り値は少なくとも 10 個の整数からなるタプルとしてアクセスすることができます。このタプルはもっとも重要な (かつ可搬性のある) stat 構造体のメンバを与えており、以下の順番、 st_mode, st_ino, st_dev, st_nlink, st_uid, st_gid, st_size, st_atime, st_mtime, st_ctime,に並んでいます。

実装によっては、この後ろにさらに値が付け加えられていることもあります。 Mac OS では、時刻の値は Mac OS の他の時刻表現値と同じように浮動小数点数 なので注意してください。標準モジュール stat では、 stat 構造体から情報を引き出す上で便利な関数や定数を定義して います。(Windows では、いくつかのデータ要素はダミーの値が埋められています。)

ノート

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

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

バージョン 2.2 で変更: 返されたオブジェクトの属性としてのアクセス機能を追加しました.

バージョン 2.5 で変更: st_gen, st_birthtime を追加しました.

os.stat_float_times([newvalue])

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

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

バージョン 2.5 で変更: Python はデフォルトで浮動小数点数を返すようになりました。浮動小数点数のタイムスタンプではうまく動かないアプリケーションはこの機能を利用して 昔ながらの振る舞いを取り戻すことができます。

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

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

os.statvfs(path)

与えられた path に対して statvfs() システムコールを実行します。戻り値はオブジェクトで、その属性は与えられたパスが収め られているファイルシステムについて記述したものです。かく属性は statvfs 構造体のメンバ: f_bsize, f_frsize, f_blocks, f_bfree, f_bavail, f_files, f_ffree, f_favail, f_flag, f_namemax,に対応します。利用できる環境: Unix。

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

バージョン 2.2 で変更: 返されたオブジェクトの属性としてのアクセス機能を追加しました.

src を指しているシンボリックリンクを dst に作成します。利用できる環境: Unix。

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

一時ファイル (temporary file) を生成する上でファイル名として相応しい一意なパス名を返します。この値は一時的なディレクトリエントリ を表す絶対パスで、 dir ディレクトリの下か、 dir が省略されたり None の場合には一時ファイルを置くための共通の ディレクトリの下になります。 prefix が与えられており、かつ None でない場合、ファイル名の先頭につけられる短い 接頭辞になります。アプリケーションは tempnam() が返したパス名を使って正しくファイルを生成し、生成したファイルを管理する責任があります; 一時ファイルの自動消去機能は提供されていません。

警告

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

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

os.tmpnam()

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

警告

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

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

os.TMP_MAX

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

ファイル path を削除します。 remove() と同じです; unlink() の名前は伝統的な Unix の関数名です。 利用できる環境: Unix、Windows。

os.utime(path, times)

path で指定されたファイルに最終アクセス時刻および最終修正時刻を設定します。 timesNone の場合、ファイルの最終アクセス時刻および最終更新時刻は現在の時刻になります。 (この動作は、その 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) を生成します。

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

オプション引数 topdownTrue であるか、指定されなかった場合、各ディレクトリからタプルを生成した後で、サブディレクトリからタプルを生成します。 (ディレクトリはトップダウンで生成)。 topdownFalse の場合、ディレクトリに対応するタプルは、そのディレクトリ以下の全てのサブディレクトリに対応 するタプルの後で (ボトムアップで) 生成されます

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

デフォルトでは、 :func:os.listdir() 呼び出しから送出されたエラーは無視されます。オプションの引数 onerror を指定するなら、 この値は関数でなければなりません; この関数は単一の引数として、 OSError インスタンスを伴って呼び出されます。この関数では エラーを報告して歩行を続けたり、例外を送出して歩行を中断したりできます。ファイル名は例外オブジェクトの filename 属性として 取得できることに注意してください。

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

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

ノート

followlinksTrue に設定すると、シンボリックリンクが親ディレクトリを指していた場合に、 無限ループになることに気をつけてください。 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 で追加.

16.1.5. プロセス管理

プロセスを生成したり管理するために、以下の関数を利用することができます。

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

os.abort()

SIGABRT シグナルを現在のプロセスに対して生成します。 Unixでは、標準設定の動作はコアダンプの生成です; Windows では、 プロセスは即座に終了コード 3 を返します。 signal.signal() を使って SIGABRT に対する シグナルハンドラを設定しているプログラムは異なる挙動を示すので注意してください。 利用できる環境: 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() をスレッド内から利用した場合に既知の問題があることに注意してください。

利用できる環境: Unix。

os.forkpty()

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

os.kill(pid, sig)

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

os.killpg(pgid, sig)

プロセスグループ pgid にシグナル sig を送ります。 利用できる環境: Unix。

バージョン 2.3 で追加.

os.nice(increment)

プロセスの “nice 値” に increment を加えます。新たな nice 値を返します。 利用できる環境: Unix。

os.plock(op)

プログラムのセグメント (program segment) をメモリ内でロックします。 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 モジュールで置き換える」 というセクションを読んでください。)

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

“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 では利用できません。

バージョン 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_DETACHP_NOWAIT に似ていますが、新たなプロセスは呼び出しプロセスのコンソールから切り離され (detach) ます。 P_OVERLAY が使われた場合、現在のプロセスは置き換えられます; 従って spawn*() は返りません。利用できる環境: Windows。

バージョン 1.6 で追加.

os.startfile(path[, operation])

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

operation が指定されないかまたは 'open' であるとき、この動作は、 Windows の Explorer 上でのファイルをダブルクリックや、コマンドプロンプト (interactive command shell) 上でのファイル名を 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() と同じ制限があります。 os.environ, 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) では、この値は実行したコマンドの終了ステータスです; ネイティブでないシェルを使っているシステムについては、 使っているシェルのドキュメントを参照してください。

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

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

os.times()

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

Windows では、最初の2つの要素だけが埋められ、残りは0になります。

os.wait()

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

os.waitpid(pid, options)

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

pid0 よりも大きい場合、 waitpid() は特定のプロセスのステータス情報を要求します。 pid0 の場合、現在のプロセスグループ内の任意の子プロセスの状態に対する要求です。 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() を参照してください。 optionswaitpid() および 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

16.1.6. 雑多なシステム情報

os.confstr(name)

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

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

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

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

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

バージョン 2.4 で追加.

16.1.7. 雑多な関数

os.urandom(n)

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

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

バージョン 2.4 で追加.