\section{\module{os} ---
         雑多なオペレーティングシステムインタフェース}

\declaremodule{standard}{os}
\modulesynopsis{雑多なオペレーティングシステムインタフェース。}
%様々なオペレーティングシステムインターフェース

このモジュールでは、オペレーティングシステム依存の機能を利用する方法
として、\refmodule{posix} や \module{nt} といったオペレーティング
システム依存の組み込みモジュールを import するよりも可搬性の高い
手段を提供しています。

このモジュールは、\module{mac} や \refmodule{posix} のような、
オペレーティングシステム依存の組み込みモジュールから関数やデータを
検索して、見つかったものを取り出し (export) ます。Python における
組み込みのオペレーティングシステム依存モジュールは、同じ機能を
利用することができる限り、同じインタフェースを使います; たとえば、
\code{os.stat(\var{path})} は \var{path} についての stat 情報を
(たまたま \POSIX{} インタフェースに起源する) 同じ書式で返します。

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

最初の \refmodule{os} の import 以後、\module{os} を介した関数の
利用は、オペレーティングシステム依存組み込みモジュールにおける関数の
直接利用に比べてパフォーマンス上のペナルティは \emph{全くありません}。
従って、\module{os}を利用しない理由は \emph{存在しません} !

%% Frank Stajano <fstajano@uk.research.att.com> complained that it
%% wasn't clear that the entries described in the subsections were all
%% available at the module level (most uses of subsections are
%% different); I think this is only a problem for the HTML version,
%% where the relationship may not be as clear.
%%
\ifhtml
\module{os} モジュールには多くの関数とデータ値が入っています。
以下の項目と、その後に続くサブセクションは \module{os} モジュールから
直接利用できます。

\fi


\begin{excdesc}{error}
関数がシステム関連のエラー(引数の型違いや他のありがちなエラーではない)
を返した場合この例外が発生します。これは \exception{OSError} とし
て知られる組み込み例外でもあります。付属する値は \cdata{errno} から
とった数値のエラーコードと、エラーコードに対応する、C 関数
\cfunction{perror()} により出力されるのと同じ文字列からなるペアです。
背後のオペレーティングシステムで定義されているエラーコード名が収め
られている \refmodule{errno}\refbimodindex{errno} を参照してください。

例外がクラスの場合、この例外は二つの属性、\member{errno} と
\member{strerror} を持ちます。前者の属性は C の \cdata{errno} 変数
の値、後者は \cfunction{strerror()} による対応するエラーメッセージ
の値を持ちます。(\function{chdir()} や \function{unlink()} のような)
ファイルシステム上のパスを含む例外に対しては、この例外インスタンス
は 3 つめの属性、\member{filename} を持ち、関数に渡されたファイル名
となります。
\end{excdesc}

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

\end{datadesc}

\begin{datadesc}{path}
\module{posixpath} や \module{macpath} のように、システムごとに対応
付けられているパス名操作のためのシステム依存の標準モジュールです。
すなわち、正しく import が行われるかぎり、
\code{os.path.split(\var{file})} は \code{posixpath.split(\var{file})}
と等価でありながらより汎用性があります。このモジュール自体が
import 可能なモジュールでもあるので注意してください。:
\refmodule{os.path} として直接 import してもかまいません。

\end{datadesc}



\subsection{プロセスのパラメタ \label{os-procinfo}}

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

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

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

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

\note{\function{putenv()} を直接呼び出しても\code{os.environ} の
内容は変わらないので、\code{os.environ}を直接変更する方がベターです。}
\note{FreeBSD と Mac OS X を含むいつくかのプラットフォームでは、
\code{environ} の値を変更するとメモリリークの原因になる場合があります。
システムの \cfunction{putenv()} に関するドキュメントを参照してください。}

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

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

\begin{funcdescni}{chdir}{path}
\funclineni{getcwd}{}
これらの関数は、``ファイルとディレクトリ'' (\ref{os-file-dir} 節) で
説明されています。
\end{funcdescni}

\begin{funcdesc}{ctermid}{}
プロセスの制御端末に対応するファイル名を返します。
利用できる環境: \UNIX 。
\end{funcdesc}

\begin{funcdesc}{getegid}{}
現在のプロセスの実行グループ id を返します。この id は
現在のプロセスで実行されているファイルの `set id' ビットに
対応します。
利用できる環境: \UNIX 。
\end{funcdesc}

\begin{funcdesc}{geteuid}{}
\index{user!effective id}
現在のプロセスの実行ユーザ id を返します。
利用できる環境: \UNIX 。
\end{funcdesc}

\begin{funcdesc}{getgid}{}
\index{process!group}
現在のプロセスの実際のグループ id を返します。
利用できる環境: \UNIX 。
\end{funcdesc}

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

\begin{funcdesc}{getlogin}{}
現在のプロセスの制御端末にログインしているユーザ名を返します。ほとんどの
場合、ユーザが誰かを知りたいときには環境変数 \envvar{LOGNAME} を、現在有
効になっているユーザ名を知りたいときには 
\code{pwd.getpwuid(os.getuid())[0]} を使うほうが便利です。
利用できる環境: \UNIX 。
\end{funcdesc}

\begin{funcdesc}{getpgrp}{}
\index{process!group}
現在のプロセス・グループの id を返します。
利用できる環境: \UNIX 。
\end{funcdesc}

\begin{funcdesc}{getpid}{}
\index{process!id}
現在のプロセス id を返します。
利用できる環境: \UNIX、 Windows。
\end{funcdesc}

\begin{funcdesc}{getppid}{}
\index{process!id of parent}
親プロセスの id を返します。
利用できる環境: \UNIX 。
\end{funcdesc}

\begin{funcdesc}{getuid}{}
\index{user!id}
現在のプロセスのユーザ id を返します。
利用できる環境: \UNIX 。
\end{funcdesc}

\begin{funcdesc}{getenv}{varname\optional{, value}}
環境変数 \var{varname} が存在する場合にはその値を返し、存在しない
場合には \var{value} を返します。\var{value} のデフォルト値は 
\code{None} です。
利用できる環境: \UNIX 互換環境、Windows。
\end{funcdesc}

\begin{funcdesc}{putenv}{varname, value}
\index{environment variables!setting}
\var{varname} と名づけられた環境変数の値を文字列 \var{value} に
設定します。このような環境変数への変更は、\function{os.system()} 、
 \function{popen()}  、 \function{fork()} および \function{execv()} 
により起動された子プロセスに影響します。
利用できる環境: 主な \UNIX 互換環境、Windows。

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

\function{putenv()} がサポートされている場合、 \code{os.environ} 
の要素に対する代入を行うと自動的に \function{putenv()} を呼び出します; 
しかし、\function{putenv()} の呼び出しは \code{os.environ} を更新しない
ので、実際には \code{os.environ} の要素に代入する方が望ましい操作です。
\end{funcdesc}

\begin{funcdesc}{setegid}{egid}
現在のプロセスに有効なグループIDをセットします。
利用できる環境: \UNIX 。
\end{funcdesc}

\begin{funcdesc}{seteuid}{euid}
現在のプロセスに有効なユーザIDをセットします。
利用できる環境: \UNIX 。
\end{funcdesc}

\begin{funcdesc}{setgid}{gid}
現在のプロセスにグループ id をセットします。
利用できる環境: \UNIX 。
\end{funcdesc}

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

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

\begin{funcdesc}{setpgid}{pid, pgrp} 
システムコール \cfunction{setpgid()} を呼び出して、
\var{pid} の id をもつプロセスのプロセスグループ id を \var{pgrp}
に設定します。
利用できる環境: \UNIX
\end{funcdesc}

\begin{funcdesc}{setreuid}{ruid, euid}
現在のプロセスに対して実際のユーザ id および実行ユーザ id を
設定します。
利用できる環境: \UNIX
\end{funcdesc}

\begin{funcdesc}{setregid}{rgid, egid}
現在のプロセスに対して実際のグループ id および実行ユーザ id を
設定します。
利用できる環境: \UNIX
\end{funcdesc}

\begin{funcdesc}{getsid}{pid}
システムコール \cfunction{getsid()} を呼び出します。機能については
 \UNIX{} マニュアルを参照してください。
利用できる環境: \UNIX。
\versionadded{2.4}
\end{funcdesc}

\begin{funcdesc}{setsid}{}
システムコール \cfunction{setsid()} を呼び出します。機能については
 \UNIX{} マニュアルを参照してください。
利用できる環境: \UNIX
\end{funcdesc}

\begin{funcdesc}{setuid}{uid}
\index{user!id, setting}
現在のプロセスのユーザ id を設定します。
利用できる環境: \UNIX
\end{funcdesc}

%% placed in this section since it relates to errno.... a little weak ;-(
\begin{funcdesc}{strerror}{code}
エラーコード \var{code} に対応するエラーメッセージを返します。
利用できる環境: \UNIX、Windows
\end{funcdesc}

\begin{funcdesc}{umask}{mask}
現在の数値 umask を設定し、以前の umask 値を返します。
利用できる環境: \UNIX、Windows
\end{funcdesc}

\begin{funcdesc}{uname}{}
現在のオペレーティングシステムを特定する情報の入った 5 要素のタプル
を返します。このタプルには 5 つの文字列:
\code{(\var{sysname}, \var{nodename}, \var{release}, \var{version},
\var{machine})} が入っています。
システムによっては、ノード名を 8 文字、または先頭の要素だけに
切り詰めます; ホスト名を取得する方法としては、
\function{socket.gethostname()} 
\withsubitem{(in module socket)}{\ttindex{gethostname()}}
を使う方がよいでしょう、あるいは
\withsubitem{(in module socket)}{\ttindex{gethostbyaddr()}}
\code{socket.gethostbyaddr(socket.gethostname())}
でもかまいません。
利用できる環境: \UNIX 互換環境
\end{funcdesc}

\begin{funcdesc}{unsetenv}{varname}
\index{environment variables!deleting}
\var{varname} という名前の環境変数を取り消します。
このような環境の変化は \function{os.system()}、 \function{popen()} または
\function{fork()} と \function{execv()} で開始されるサブプロセスに影響を与えます。
利用できる環境:  ほとんどの \UNIX 互換環境、Windows

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

\subsection{ファイルオブジェクトの生成 \label{os-newstreams}}

以下の関数は新しいファイルオブジェクトを作成します。

\begin{funcdesc}{fdopen}{fd\optional{, mode\optional{, bufsize}}}
ファイル記述子 \var{fd} に接続している、開かれた
ファイルオブジェクトを返します。\index{I/O control!buffering}
引数 \var{mode} および \var{bufsize} は、組み込み関数 \function{open()} 
における対応する引数と同じ意味を持ちます。
利用できる環境: Macintosh、 \UNIX、Windows
\versionchanged[引数 \var{mode} は、指定されるならば、
  \character{r}、 \character{w}、 \character{a}
  のいずれかの文字で始まらなければなりません。
  そうでなければ \exception{ValueError} が送出されます]{2.3}
\versionchanged[\UNIX では、引数 \var{mode} が \character{a} で始まる時には
  \var{O_APPEND} フラグがファイル記述子に設定されます。
  (ほとんどのプラットフォームで \cfunction{fdopen()}
  実装が既に行なっていることです)]{2.5}
\end{funcdesc}

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

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

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

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

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

以下のメソッドは子プロセスから終了ステータスを取得できるようには
していません。入出力ストリームを制御し、かつ終了コードの取得も
行える唯一の方法は、
\refmodule{popen2} モジュールの  \class{Popen3} と  \class{Popen4} 
クラスを利用する事です。これらは \UNIX 上でのみ利用可能です。

これらの関数の利用に関係して起きうるデッドロック状態についての議論は、
``\ulink{フロー制御問題}{popen2-flow-control.html}''
(section~\ref{popen2-flow-control}) を参照してください。

\begin{funcdesc}{popen2}{cmd\optional{, mode\optional{, bufsize}}}
\var{cmd} を子プロセスとして実行します。ファイル・オブジェクト
\code{(\var{child_stdin}, \var{child_stdout})} を返します。
利用できる環境: Macintosh、\UNIX、Windows
\versionadded{2.0}
\end{funcdesc}

\begin{funcdesc}{popen3}{cmd\optional{, mode\optional{, bufsize}}}
\var{cmd} を子プロセスとして実行します。ファイルオブジェクト 
\code{(\var{child_stdin}, \var{child_stdout}, \var{child_stderr})} を
返します。
利用できる環境: Macintosh、\UNIX、Windows
\versionadded{2.0}
\end{funcdesc}

\begin{funcdesc}{popen4}{cmd\optional{, mode\optional{, bufsize}}}
\var{cmd} を子プロセスとして実行します。ファイルオブジェクト
\code{(\var{child_stdin}, \var{child_stdout_and_stderr})} を返します。
利用できる環境: Macintosh、\UNIX、Windows
\versionadded{2.0}
\end{funcdesc}

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

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

\subsection{ファイル記述子の操作 \label{os-fd-ops}}

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

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

\begin{funcdesc}{close}{fd}
ファイルディスクリプタ \var{fd} を閉じます。
利用できる環境: Macintosh、 \UNIX、 Windows

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

\begin{funcdesc}{dup}{fd}
ファイル記述子 \var{fd} の複製を返します。
利用できる環境: Macintosh、 \UNIX、 Windows.
\end{funcdesc}

\begin{funcdesc}{dup2}{fd, fd2}
ファイル記述子を \var{fd} から \var{fd2} に複製し、必要なら後者の
記述子を前もって閉じておきます。
利用できる環境: Macintosh、\UNIX、Windows
\end{funcdesc}

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

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

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

\begin{funcdesc}{fstat}{fd}
\function{stat()} のようにファイル記述子 \var{fd} の状態を返します。
利用できる環境: Macintosh、\UNIX、Windows
\end{funcdesc}

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

\begin{funcdesc}{fsync}{fd}
ファイル記述子 \var{fd} を持つファイルのディスクへの書き込みを強制します。
\UNIX では、ネイティブの \cfunction{fsync()} 関数を、Windows では MS 
\cfunction{_commit()} 関数を呼び出します。

Python のファイルオブジェクト \var{f} を使う場合、\var{f} の内部バッファ
を確実にディスクに書き込むために、まず \code{\var{f}.flush()} を実行し、
それから \code{os.fsync(\var{f}.fileno())} してください。
利用できる環境: Macintosh、\UNIX、2.2.3 以降では Windows も
\end{funcdesc}

\begin{funcdesc}{ftruncate}{fd, length}
ファイル記述子 \var{fd} に対応するファイルを、サイズが最大で 
\var{length} バイトになるように切り詰めます。
利用できる環境: Macintosh、\UNIX
\end{funcdesc}

\begin{funcdesc}{isatty}{fd}
ファイル記述子 \var{fd} が開いていて、tty(のような)装置に接
続されている場合、\code{1} を返します。そうでない場合は \code{0} を返
します。
利用できる環境: Macintosh、\UNIX
\end{funcdesc}

\begin{funcdesc}{lseek}{fd, pos, how}
ファイル記述子 \var{fd} の現在の位置を \var{pos} に設定します。
\var{pos} の意味は \var{how} で修飾されます: 
ファイルの先頭からの相対には \code{0} を設定します; 
現在の位置からの相対には\code{1} を設定します; 
ファイルの末尾からの相対には \code{2} を設定します。
利用できる環境:Macintosh、 \UNIX、Windows。
\end{funcdesc}

\begin{funcdesc}{open}{file, flags\optional{, mode}}
ファイル \var{file} を開き、\var{flag} に従って様々なフラグを
設定し、可能なら \var{mode} に従ってファイルモードを設定します。
\var{mode} の標準の設定値は \code{0777} (8進表現) で、先に
現在の umask を使ってマスクを掛けます。新たに開かれたファイルの
のファイル記述子を返します。利用できる環境:Macintosh、\UNIX、Windows。
フラグとファイルモードの値についての詳細は C ランタイムのドキュメントを
参照してください; (\constant{O_RDONLY} や \constant{O_WRONLY} のような)
フラグ定数はこのモジュールでも定義されています (以下を参照してください)。

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

\begin{funcdesc}{openpty}{}
新しい擬似端末のペアを開きます。ファイル記述子のペア
\code{(\var{master}, \var{slave})} を返し、それぞれ pty および tty
を表します。(少しだけ) より可搬性のあるアプローチとしては、
\refmodule{pty}\refstmodindex{pty} モジュールを使ってください。
利用できる環境: Macintosh、いくつかの \UNIX 系システム
\end{funcdesc}

\begin{funcdesc}{pipe}{}
パイプを作成します。ファイル記述子のペア \code{(\var{r}, \var{w})} 
を返し、それぞれ読み出し、書き込み用に使うことができます。
利用できる環境: Macintosh、\UNIX、Windows
\end{funcdesc}

\begin{funcdesc}{read}{fd, n}
ファイル記述子 \var{fd} から最大で \var{n} バイト読み出します。
読み出されたバイト列の入った文字列を返します。\var{fd} が参照して
いるファイルの終端に達した場合、空の文字列が返されます。
利用できる環境: Macintosh、\UNIX、Windows。

\begin{notice}
この関数は低レベルの I/O のためのもので、\function{open()} や 
\function{pipe()} が返すファイル記述子に対して適用しなければ
なりません。組み込み関数 \function{open()} や \function{popen()} 、
\function{fdopen()} の返す ``ファイルオブジェクト'' 、あるいは
\code{sys.stdin} から読み出すには、オブジェクトの \method{read()} 
メソッドを使ってください。
\end{notice}
\end{funcdesc}

\begin{funcdesc}{tcgetpgrp}{fd}
\var{fd} (\function{open()} が返す開かれたファイル記述子) 
で与えられる端末に関連付けられたプロセスグループを返します。
利用できる環境: Macintosh、\UNIX
\end{funcdesc}

\begin{funcdesc}{tcsetpgrp}{fd, pg}
\var{fd} (\function{open()} が返す開かれたファイル記述子) 
で与えられる端末に関連付けられたプロセスグループを \var{pg}
に設定します。
利用できる環境: Macintosh、\UNIX
\end{funcdesc}

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

\begin{funcdesc}{write}{fd, str}
ファイル記述子 \var{fd} に文字列 \var{str} を書き込みます。
実際に書き込まれたバイト数を返します。
利用できる環境:Macintosh、 \UNIX、Windows。

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


以下のデータ要素は \function{open()} 関数の \var{flags} 引数を
構築するために利用することができます。いくつかのアイテムは
全てのプラットフォームで使えるわけではありません。
何が使えるか、また何に使うのかといった説明は \manpage{open}{2} を参照してください。

\begin{datadesc}{O_RDONLY}
\dataline{O_WRONLY}
\dataline{O_RDWR}
\dataline{O_APPEND}
\dataline{O_CREAT}
\dataline{O_EXCL}
\dataline{O_TRUNC}

\function{open()} 関数の \var{flag} 引数のためのオプションフラグです。
これらの値はビット単位 OR を取れます。
利用できる環境: Macintosh、 \UNIX、Windows。
\end{datadesc}

\begin{datadesc}{O_DSYNC}
\dataline{O_RSYNC}
\dataline{O_SYNC}
\dataline{O_NDELAY}
\dataline{O_NONBLOCK}
\dataline{O_NOCTTY}
\dataline{O_SHLOCK}
\dataline{O_EXLOCK}
上のフラグと同様、\function{open()} 関数の \var{flag} 引数のための
オプションフラグです。これらの値はビット単位 OR を取れます。
利用できる環境: Macintosh、 \UNIX 。
 \end{datadesc}

\begin{datadesc}{O_BINARY}
\function{open()} 関数の \var{flag} 引数のためのオプションフラグです。
この値は上に列挙したフラグとビット単位 OR を取ることができます。
利用できる環境: Windows。

%% XXX need to check on the availability of this one.
\end{datadesc}

\begin{datadesc}{O_NOINHERIT}
\dataline{O_SHORT_LIVED}
\dataline{O_TEMPORARY}
\dataline{O_RANDOM}
\dataline{O_SEQUENTIAL}
\dataline{O_TEXT}
\function{open()} 関数の \var{flag} 引数のためのオプションフラグです。
これらの値はビット単位 OR を取ることができます。
利用できる環境: Windows
\end{datadesc}

\begin{datadesc}{SEEK_SET}
\dataline{SEEK_CUR}
\dataline{SEEK_END}
\function{lseek()} 関数のパラメータです。
値はそれぞれ 0、 1、 2 です。
利用できる環境: Windows、 Macintosh、 \UNIX
\versionadded{2.5}
\end{datadesc}

\subsection{ファイルとディレクトリ \label{os-file-dir}}

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

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

\note{I/O 操作は \function{access()} が成功を思わせるときにも失敗することがありえます。
特にネットワーク・ファイルシステムにおける操作が
通常の \POSIX{} 許可ビット・モデルをはみ出す意味論を備える場合には
そのようなことが起こりえます。}
\end{funcdesc}

\begin{datadesc}{F_OK}
\function{access()} の \var{mode} に渡すための値で、
\var{path} が存在するかどうかを調べます。
\end{datadesc}

\begin{datadesc}{R_OK}
\function{access()} の \var{mode} に渡すための値で、
\var{path} が読み出し可能かどうかを調べます。
\end{datadesc}

\begin{datadesc}{W_OK}
\function{access()} の \var{mode} に渡すための値で、
\var{path} が書き込み可能かどうかを調べます。
\end{datadesc}

\begin{datadesc}{X_OK}
\function{access()} の \var{mode} に渡すための値で、
\var{path} が実行可能かどうかを調べます。
\end{datadesc}

\begin{funcdesc}{chdir}{path}
\index{directory!changing}
現在の作業ディレクトリ (current working directory) を \var{path} に
設定します。利用できる環境: Macintosh、 \UNIX、Windows。
\end{funcdesc}

\begin{funcdesc}{getcwd}{}
現在の作業ディレクトリを表現する文字列を返します。
利用できる環境: Macintosh、 \UNIX、Windows。
\end{funcdesc}

\begin{funcdesc}{getcwdu}{}
現在の作業ディレクトリを表現するユニコードオブジェクトを返します。
利用できる環境: Macintosh、 \UNIX、 Windows
\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{chroot}{path}
現在のプロセスに対してルートディレクトリを \var{path} に変更します。
利用できる環境: Macintosh、\UNIX。 
\versionadded{2.2}
\end{funcdesc}

\begin{funcdesc}{chmod}{path, mode}
\var{path} のモードを数値 \var{mode} に変更します。
\var{mode} は、(\module{stat} モジュールで定義されている)
以下の値のいずれかまたはビット単位の OR で組み合わせた値を取り得ます:
\begin{itemize}
  \item \code{S_ISUID}
  \item \code{S_ISGID}
  \item \code{S_ENFMT}
  \item \code{S_ISVTX}
  \item \code{S_IREAD}
  \item \code{S_IWRITE}
  \item \code{S_IEXEC}
  \item \code{S_IRWXU}
  \item \code{S_IRUSR}
  \item \code{S_IWUSR}
  \item \code{S_IXUSR}
  \item \code{S_IRWXG}
  \item \code{S_IRGRP}
  \item \code{S_IWGRP}
  \item \code{S_IXGRP}
  \item \code{S_IRWXO}
  \item \code{S_IROTH}
  \item \code{S_IWOTH}
  \item \code{S_IXOTH}
\end{itemize}
利用できる環境: Macintosh、 \UNIX、 Windows。

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

\begin{funcdesc}{chown}{path, uid, gid}
\var{path} の所有者 (owner) id とグループ id を、数値 \var{uid}
および \var{gid} に変更します。いずれかの id を変更せずにおくには、
その値として -1 をセットします。
利用できる環境: Macintosh、 \UNIX。
\end{funcdesc}

\begin{funcdesc}{lchown}{path, uid, gid}
Change the owner and group id of \var{path} to the numeric \var{uid}
and gid. This function will not follow symbolic links.
\var{path} の所有者 (owner) id とグループ id を、数値 \var{uid}
および \var{gid} に変更します。この関数はシンボリックリンクをたどりません。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{link}{src, dst}
\var{src} を指しているハードリンク \var{dst} を作成します。
利用できる環境: Macintosh、 \UNIX。
\end{funcdesc}

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

\versionchanged[Windows NT/2k/XP と \UNIX では、\var{path} が Unicode オ
ブジェクトの場合、Unicode オブジェクトのリストが返されます。]{2.3}
\end{funcdesc}

\begin{funcdesc}{lstat}{path}
\function{stat()} に似ていますが、シンボリックリンクをたどりません。
利用できる環境: Macintosh、 \UNIX。
\end{funcdesc}

\begin{funcdesc}{mkfifo}{path\optional{, mode}}
数値で指定されたモード \var{mode} を持つ FIFO (名前付きパイプ) を
\var{path} に作成します。\var{mode} の標準の値は \code{0666} (8進)
です。現在の umask 値が前もって \var{mode} からマスクされます。
利用できる環境: Macintosh、 \UNIX。

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

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

\begin{funcdesc}{major}{device}
生のデバイス番号から、デバイスのメジャー番号を取り出します。(たいてい
\ctype{stat} の \member{st_dev} フィールドか \member{st_rdev}　
フィールドです)
\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{minor}{device}
生のデバイス番号から、デバイスのマイナー番号を取り出します。(たいてい
\ctype{stat} の \member{st_dev} フィールドか \member{st_rdev}　
フィールドです)
\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{makedev}{major, minor}
major と minor から、新しく生のデバイス番号を作ります。
\versionadded{2.3}
\end{funcdesc}

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

\begin{funcdesc}{makedirs}{path\optional{, mode}}
再帰的なディレクトリ作成関数です。
\index{directory!creating} \index{UNC paths!and \function{os.makedirs()}}
\function{mkdir()} に似て
いますが、末端 (leaf) となるディレクトリを作成するために必要な
中間の全てのディレクトリを作成します。末端ディレクトリが
すでに存在する場合や、作成ができなかった場合には \exception{error}
例外を送出します。\var{mode} の標準の値は \code{0777} (8進)です。
システムによっては、 \var{mode} は無視されます。利用の際には、
現在の umask 値が前もってマスクされます。
\note{\function{makedirs()} は作り出すパス要素が \var{os.pardir} を
含むと混乱することになります。}
\versionadded{1.5.2}
\versionchanged[この関数は UNC パスを正しく扱えるようになりました]{2.3}
\end{funcdesc}

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

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

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

\begin{funcdesc}{readlink}{path}
シンボリックリンクが指しているパスを表す文字列を返します。
返される値は絶対パスにも、相対パスにもなり得ます; 相対
パスの場合、
\code{os.path.join(os.path.dirname(\var{path}), \var{result})}
を使って絶対パスに変換することができます。
利用できる環境: Macintosh、 \UNIX。
\end{funcdesc}

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

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

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

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

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

\begin{funcdesc}{rmdir}{path}
ディレクトリ \var{path} を削除します。
利用できる環境: Macintosh、 \UNIX、Windows。
\end{funcdesc}

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

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

\versionchanged [もし \function{stat_float_times} が真を返す場合、時間値は浮動小数点で秒を計ります。ファイルシステムがサポートしていれば、秒の小数点以下の桁も含めて返されます。 Mac OS では、時間は常に浮動小数点です。詳細な説明は \function{stat_float_times} を参照してください]{2.3}

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

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

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

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

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

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

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

利用できる環境: Macintosh、 \UNIX、Windows。

\versionchanged
[返されたオブジェクトの属性としてのアクセス機能を追加しました]{2.2}
\versionchanged[st_gen、 st_birthtime を追加しました]{2.5}
\end{funcdesc}

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

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

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

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

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

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

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

\begin{funcdesc}{symlink}{src, dst}
\var{src} を指しているシンボリックリンクを \var{dst} に作成します。
利用できる環境: \UNIX。
\end{funcdesc}

\begin{funcdesc}{tempnam}{\optional{dir\optional{, prefix}}}
一時ファイル (temporary file) を生成する上でファイル名として相応しい
一意なパス名を返します。この値は一時的なディレクトリエントリ
を表す絶対パスで、\var{dir} ディレクトリの下か、\var{dir} が省略
されたり \code{None} の場合には一時ファイルを置くための共通の
ディレクトリの下になります。\var{prefix} が与えられており、かつ
\code{None} でない場合、ファイル名の先頭につけられる短い
接頭辞になります。アプリケーションは \function{tempnam()}
が返したパス名を使って正しくファイルを生成し、生成したファイルを
管理する責任があります; 一時ファイルの自動消去機能は提供されて
いません。
\warning{\function{tempnam()} を使うと、symlink 攻撃に対して脆弱
になります; 代りに\function{tmpfile()} (第\ref{os-newstreams}節)
を使うよう検討してください。}
利用できる環境: Macintosh、 \UNIX、 Windows。
\end{funcdesc}

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

\warning{\function{tmpnam()} を使うと、symlink 攻撃に対して脆弱
になります; 代りに\function{tmpfile()}  (第\ref{os-newstreams}節)
を使うよう検討してください。}
利用できる環境: \UNIX、Windows。
この関数はおそらく Windows では使うべきではないでしょう;
Micorosoft の \function{tmpnam()} 実装では、常に現在のドライブの
ルートディレクトリ下のファイル名を生成しますが、これは一般的には
テンポラリファイルを置く場所としてはひどい場所です 
(アクセス権限によっては、この名前をつかってファイルを開くことすら
できないかもしれません)。
\end{funcdesc}

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

\begin{funcdesc}{unlink}{path}
ファイル \var{path} を削除します。\function{remove()} と同じです; 
\function{unlink()} の名前は伝統的な \UNIX{} の関数名です。
利用できる環境: Macintosh、 \UNIX、Windows。
\end{funcdesc}

\begin{funcdesc}{utime}{path, times}
\var{path} で指定されたファイルに最終アクセス時刻および最終修正時刻
を設定します。\var{times} が \code{None} の場合、ファイルの最終
アクセス時刻および最終更新時刻は現在の時刻になります。そうでない
場合、 \var{times} は 2 要素のタプルで、\code{(\var{atime}, \var{mtime})}
の形式をとらなくてはなりません。これらはそれぞれアクセス時刻および修正時刻
を設定するために使われます。
\var{path} にディレクトリを指定できるかどうかは、オペレーティングシステム
がディレクトリをファイルの一種として実装しているかどうかに依存します (例えば、
Windows はそうではありません)。ここで設定した時刻の値は、オペレーティング
システムがアクセス時刻や更新時刻を記録する際の精度によっては、後で\function{stat()}
呼び出したときの値と同じにならないかも知れないので注意してください。
\function{stat()} も参照してください。
\versionchanged[\var{times} として \code{None} をサポートするように
しました]{2.0}
利用できる環境: Macintosh、 \UNIX、Windows。
\end{funcdesc}

\begin{funcdesc}{walk}{top\optional{, topdown\code{=True}
                       \optional{, onerror\code{=None}}}}
\index{directory!walking}
\index{directory!traversal}
\function{walk()} は、ディレクトリツリー以下のファイル名を、ツリーを
トップダウンとボトムアップの両方向に歩行することで生成します。
ディレクトリ \var{top} を根に持つディレクトリツリーに含まれる、
各ディレクトリ(\var{top} 自身を含む) から、タプル \code{(\var{dirpath}, 
\var{dirnames}, \var{filenames})} を生成します。

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

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

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

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

\begin{notice}
相対パスを渡した場合、\function{walk()} の回復の間でカレント作業ディレク
トリを変更しないでください。\function{walk()} はカレントディレクトリを変
更しませんし、呼び出し側もカレントディレクトリを変更しないと仮定していま
す。
\end{notice}

\begin{notice}
シンボリックリンクをサポートするシステムでは、サブディレクトリへのリンク
が \var{dirnames} リストに含まれますが、\function{walk()} はそのリンクを
たどりません (シンボリックリンクをたどると、無限ループに陥りやすくなりま
す)。リンクされたディレクトリをたどるには、
\code{os.path.islink(\var{path})} でリンク先ディレクトリを確認し、各ディ
レクトリに対して \code{walk(\var{path})} を実行するとよいでしょう。
\end{notice}

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

\begin{verbatim}
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
\end{verbatim}

次の例では、ツリーをボトムアップで歩行することが不可欠になります;
\function{rmdir()} はディレクトリが空になる前に削除させないからです:

\begin{verbatim}
# 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))
\end{verbatim}


\versionadded{2.3}
\end{funcdesc}

\subsection{プロセス管理 \label{os-process}}

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

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

\begin{funcdesc}{abort}{}
\constant{SIGABRT} シグナルを現在のプロセスに対して生成します。
\UNIX では、標準設定の動作はコアダンプの生成です; Windows では、
プロセスは即座に終了コード \code{3} を返します。
 \function{signal.signal()} を使って \constant{SIGABRT} に対する
シグナルハンドラを設定しているプログラムは異なる挙動を示すので
注意してください。
利用できる環境: Macintosh、 \UNIX、 Windows。
\end{funcdesc}

\begin{funcdesc}{execl}{path, arg0, arg1, \moreargs}
\funcline{execle}{path, arg0, arg1, \moreargs, env}
\funcline{execlp}{file, arg0, arg1, \moreargs}
\funcline{execlpe}{file, arg0, arg1, \moreargs, env}
\funcline{execv}{path, args}
\funcline{execve}{path, args, env}
\funcline{execvp}{file, args}
\funcline{execvpe}{file, args, env}

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

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

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


\function{execle()}、 \function{execlpe()}、 \function{execve()}、
および \function{execvpe()} (全て末尾に\character{e} がついていること
に注意してください) では、\var{env} パラメタは新たなプロセスで利用
される環境変数を定義するためのマップ型でなくてはなりません;
\function{execl()}、\function{execlp()}、 \function{execv()}、
および \function{execvp()} では、全て新たなプロセスは現在のプロセス
の環境を引き継ぎます。
利用できる環境: Macintosh、 \UNIX、 Windows。
\end{funcdesc}

\begin{funcdesc}{_exit}{n}
終了ステータス \var{n} でシステムを終了します。このとき
クリーンアップハンドラの呼び出しや、標準入出力バッファの
フラッシュなどは行いません。
利用できる環境: Macintosh、 \UNIX、 Windows。

\begin{notice}
システムを終了する標準的な方法は \code{sys.exit(\var{n})}
です。\function{_exit()} は通常、 \function{fork()} された後の子プロセス
でのみ使われます。
\end{notice}
\end{funcdesc}

以下の終了コードは必須ではありませんが \function{_exit()} と共に使うこと
ができます。一般に、 メールサーバの外部コマンド配送プログラムのような、
Python で書かれたシステムプログラムに使います。
\note{いくらかの違いがあって、これらの全てが全ての \UNIX{} プラットフォームで
使えるわけではありません。以下の定数は基礎にあるプラットフォームで
定義されていれば定義されます。}

\begin{datadesc}{EX_OK}
エラーが起きなかったことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_USAGE}
誤った個数の引数が渡されたときなど、コマンドが間違って使われたことを表す
終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_DATAERR}
入力データが間違っていたことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_NOINPUT}
入力ファイルが存在しなかった、または、読み込み不可だったことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_NOUSER}
指定されたユーザが存在しなかったことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_NOHOST}
指定されたホストが存在しなかったことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_UNAVAILABLE}
要求されたサービスが利用できないことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_SOFTWARE}
内部ソフトウェアエラーが検出されたことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_OSERR}
fork できない、pipe の作成ができないなど、オペレーティング・システム・エ
ラーが検出されたことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_OSFILE}
システムファイルが存在しなかった、開けなかった、あるいはその他のエラーが
起きたことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_CANTCREAT}
ユーザには作成できない出力ファイルを指定したことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_IOERR}
ファイルの I/O を行っている途中にエラーが発生したときの終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_TEMPFAIL}
一時的な失敗が発生したことを表す終了コード。これは、再試行可能な操作の途
中に、ネットワークに接続できないというような、実際にはエラーではないかも
知れないことを意味します。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_PROTOCOL}
プロトコル交換が不正、不適切、または理解不能なことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_NOPERM}
操作を行うために十分な許可がなかった（ファイルシステムの問題を除く）こと
を表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_CONFIG}
設定エラーが起こったことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{datadesc}{EX_NOTFOUND}
``an entry was not found'' のようなことを表す終了コード。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

\begin{funcdesc}{fork}{}
子プロセスを fork します。子プロセスでは \code{0} が返り、
親プロセスでは子プロセスの id が返ります。
利用できる環境: Macintosh、 \UNIX。
\end{funcdesc}

\begin{funcdesc}{forkpty}{}
子プロセスを fork します。このとき新しい擬似端末 (psheudo-terminal) 
を子プロセスの制御端末として使います。 親プロセスでは 
\code{(\var{pid}, \var{fd})} からなるペアが返り、\var{fd} は擬似端末の
マスタ側 (master end) のファイル記述子となります。可搬性のある
アプローチを取るためには、\refmodule{pty} モジュールを利用してください。
利用できる環境: Macintosh、 いくつかの \UNIX 系。
\end{funcdesc}

\begin{funcdesc}{kill}{pid, sig}
\index{process!killing}
\index{process!signalling}
プロセス \var{pid} にシグナル \var{sig} を送ります。
ホストプラットフォームで利用可能なシグナルを特定する定数は
\refmodule{signal} モジュールで定義されています。
利用できる環境: Macintosh、 \UNIX。
\end{funcdesc}

\begin{funcdesc}{killpg}{pgid, sig}
\index{process!killing}
\index{process!signalling}
プロセスグループ \var{pgid} にシグナル \var{sig} を送ります。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{nice}{increment}
プロセスの ``nice 値'' に \var{increment} を加えます。新たな
nice 値を返します。
利用できる環境: Macintosh、 \UNIX。
\end{funcdesc}

\begin{funcdesc}{plock}{op}
プログラムのセグメント (program segment) をメモリ内でロックします。
\var{op} (\code{<sys/lock.h>} で定義されています) にはどのセグメントを
ロックするかを指定します。
利用できる環境: Macintosh、 \UNIX。
\end{funcdesc}

\begin{funcdescni}{popen}{\unspecified}
\funclineni{popen2}{\unspecified}
\funclineni{popen3}{\unspecified}
\funclineni{popen4}{\unspecified}
子プロセスを起動し、子プロセスとの通信のために開かれたパイプを返します。
これらの関数は \ref{os-newstreams} 節で記述されています。
\end{funcdescni}

\begin{funcdesc}{spawnl}{mode, path, \moreargs}
\funcline{spawnle}{mode, path, \moreargs, env}
\funcline{spawnlp}{mode, file, \moreargs}
\funcline{spawnlpe}{mode, file, \moreargs, env}
\funcline{spawnv}{mode, path, args}
\funcline{spawnve}{mode, path, args, env}
\funcline{spawnvp}{mode, file, args}
\funcline{spawnvpe}{mode, file, args, env}
新たなプロセス内でプログラム \var{path} を実行します。
\var{mode} が \constant{P_NOWAIT} の場合、この関数は
新たなプロセスのプロセス ID となります。; \var{mode} が \constant{P_WAIT}
の場合、子プロセスが正常に終了するとその終了コードが返ります。そうでない
場合にはプロセスを kill したシグナル \var{signal} に対して
 \code{-\var{signal}} が返ります。Windows では、プロセス ID は
実際にはプロセスハンドル値になります。

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

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

\function{spawnle()}、 \function{spawnlpe()}、 \function{spawnve()}、
および \function{spawnvpe()} (全て末尾に\character{e} がついていること
に注意してください) では、\var{env} パラメタは新たなプロセスで利用
される環境変数を定義するためのマップ型でなくてはなりません;
\function{spawnl()}、\function{spawnlp()}、 \function{spawnv()}、
および \function{spawnvp()} では、全て新たなプロセスは現在のプロセス
の環境を引き継ぎます。

例えば、以下の \function{spawnlp()} および \function{spawnvpe()} 
呼び出し:

\begin{verbatim}
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)
\end{verbatim}

は等価です。利用できる環境: \UNIX、Windows。 

\function{spawnlp()}、\function{spawnlpe()}、 \function{spawnvp()} 
および \function{spawnvpe()} は Windows では利用できません。
\versionadded{1.6}

\end{funcdesc}

\begin{datadesc}{P_NOWAIT}
\dataline{P_NOWAITO}
\function{spawn*()} 関数ファミリに対する \var{mode} パラメタ
として取れる値です。この値のいずれかを \var{mode} として与えた場合、
\function{spawn*()} 関数は新たなプロセスが生成されるとすぐに、
プロセスの ID を戻り値として返ります。
利用できる環境: Macintosh、 \UNIX、Windows。 
\versionadded{1.6}
\end{datadesc}

\begin{datadesc}{P_WAIT}
\function{spawn*()} 関数ファミリに対する \var{mode} パラメタ
として取れる値です。この値を \var{mode} として与えた場合、
\function{spawn*()} 関数は新たなプロセスを起動して完了するまで返らず、
プロセスがうまく終了した場合には終了コードを、シグナルによってプロセス
が kill された場合には \code{-\var{signal}} を返します。
利用できる環境: Macintosh、 \UNIX、Windows。 
\versionadded{1.6}
\end{datadesc}

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

\begin{funcdesc}{startfile}{path\optional{, operation}}
ファイルを関連付けられたアプリケーションを使って「スタート」します。

\var{operation} が指定されないかまたは \code{'open'} であるとき、
この動作は、 Windows の Explorer 上でのファイルをダブルクリックや、
コマンドプロンプト (interactive command shell) 上での
ファイル名を \program{start} 命令の引数としての実行と同様です:
ファイルは拡張子が関連付けされているアプリケーション (が存在する場合)
を使って開かれます。

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

\function{startfile()} は関連付けされたアプリケーションが起動すると
同時に返ります。アプリケーションが閉じるまで待機させるためのオプション
はなく、アプリケーションの終了状態を取得する方法もありません。
\var{path} 引数は現在のディレクトリからの相対で表します。
絶対パスを利用したいなら、最初の文字はスラッシュ 
(\character{/}) ではないので注意してください; もし最初の文字がスラッシュ
なら、システムの背後にある Win32 \cfunction{ShellExecute()} 関数は
動作しません。\function{os.path.normpath()} 関数を使って、Win32 用に
正しくコード化されたパスになるようにしてください。
利用できる環境: Windows。 
\versionadded{2.0}
\versionadded[\var{operation} パラメータ]{2.5}
\end{funcdesc}

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

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

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

利用できる環境: Macintosh、 \UNIX、 Windows。
\end{funcdesc}

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

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

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

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

\begin{funcdesc}{wait3}{\optional{options}}
\function{waitpid()} に似ていますが、プロセス id を引数に取らず、
子プロセス id、終了ステータスインジケータ、リソース使用情報の3要素からなるタプルを返します。
リソース使用情報の詳しい情報は \module{resource}.\function{getrusage()}
を参照してください。
\var{options} は \function{waitpid()} および \function{wait4()} と同様です。
利用できる環境: \UNIX。
\versionadded{2.5}
\end{funcdesc}

\begin{funcdesc}{wait4}{pid, options}
\function{waitpid()} に似ていますが、
子プロセス id、終了ステータスインジケータ、リソース使用情報の3要素からなるタプルを返します。
リソース使用情報の詳しい情報は \module{resource}.\function{getrusage()}
を参照してください。
\function{wait4()} の引数は \function{waitpid()} に与えられるものと同じです。
利用できる環境: \UNIX。
\versionadded{2.5}
\end{funcdesc}

\begin{datadesc}{WNOHANG}
子プロセス状態がすぐに取得できなかった場合に直ちに終了する
ようにするための \function{waitpid()} のオプションです。
この場合、関数は \code{(0, 0)} を返します。
利用できる環境: Macintosh、\UNIX。
\end{datadesc}

\begin{datadesc}{WCONTINUED}
このオプションによって子プロセスは前回状態が報告された後にジョブ制御による停止状態から実行を継続された場合に報告されるようになります。
利用できる環境: ある種の \UNIX{} システム。
\versionadded{2.3} 
\end{datadesc}

\begin{datadesc}{WUNTRACED}
このオプションによって子プロセスは停止されていながら停止されてから状態が報告されていない場合に報告されるようになります。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{datadesc}

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

\begin{funcdesc}{WCOREDUMP}{status}
プロセスに対してコアダンプが生成されていた場合には \code{True} を、
それ以外の場合は \code{False} を返します。
利用できる環境: Macintosh、 \UNIX。
\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{WIFCONTINUED}{status}
プロセスがジョブ制御による停止状態から実行を継続された (continue) 場合に \code{True} を、
それ以外の場合は \code{False} を返します。
利用できる環境: \UNIX。
\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{WIFSTOPPED}{status}
プロセスが停止された (stop) 場合に \code{True} を、
それ以外の場合は \code{False} を返します。
利用できる環境: \UNIX。
\end{funcdesc}

\begin{funcdesc}{WIFSIGNALED}{status}
プロセスがシグナルによって終了した (exit) 場合に \code{True} を、
それ以外の場合は \code{False} を返します。
利用できる環境: Macintosh、 \UNIX。
\end{funcdesc}

\begin{funcdesc}{WIFEXITED}{status}
プロセスが \manpage{exit}{2} システムコールで終了した場合に \code{True} を、
それ以外の場合は \code{False} を返します。
利用できる環境: Macintosh、\UNIX。
\end{funcdesc}

\begin{funcdesc}{WEXITSTATUS}{status}
\code{WIFEXITED(\var{status})} が真の場合、\manpage{exit}{2} システム
コールに渡された整数パラメタを返します。そうでない場合、
返される値には意味がありません。
利用できる環境: Macintosh、\UNIX。
\end{funcdesc}

\begin{funcdesc}{WSTOPSIG}{status}
プロセスを停止させたシグナル番号を返します。
利用できる環境: Macintosh、\UNIX。
\end{funcdesc}

\begin{funcdesc}{WTERMSIG}{status}
プロセスを終了させたシグナル番号を返します。
利用できる環境: Macintosh、\UNIX
\end{funcdesc}


\subsection{雑多なシステム情報 \label{os-path}}


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

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

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

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

\begin{funcdesc}{getloadavg}{}
過去 1 分、5 分、15分間で、システムで走っているキューの平均プロセス数を
返します。平均負荷が得られない場合には \exception{OSError} を送出します。

\versionadded{2.3}
\end{funcdesc}

\begin{funcdesc}{sysconf}{name}
整数値のシステム設定値を返します。
\var{name} で指定された設定値が定義されていない場合、\code{-1} 
が返されます。\var{name} に関するコメントとしては、\function{confstr()}
で述べた内容が同様に当てはまります; 既知の設定名についての情報を
与える辞書は \code{sysconf_names} で与えられています。
利用できる環境: Macintosh、\UNIX。
\end{funcdesc}

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


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

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

\begin{datadesc}{curdir}
現在のディレクトリ参照するためにオペレーティングシステムで使われる
文字列定数です。
例: \POSIX{} では \code{'.'} 、Mac OS 9 では\code{':'} 。
\module{os.path} からも利用できます。
\end{datadesc}

\begin{datadesc}{pardir}
親ディレクトリを参照するためにオペレーティングシステムで使われる
文字列定数です。
例: \POSIX{} では \code{'..'} 、Mac OS 9 では\code{'::'} 。
\module{os.path} からも利用できます。
\end{datadesc}

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

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

\begin{datadesc}{extsep}
ベースのファイル名と拡張子を分ける文字。
たとえば、\file{os.py} では \character{.} です。
\module{os.path} からも利用できます。
\versionadded{2.2}
\end{datadesc}

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

\begin{datadesc}{defpath}
\function{exec*p*()} や \function{spawn*p*()} において、環境変数辞書内に
\code{'PATH'} キーがない場合に使われる標準設定のサーチパスです。
\module{os.path} からも利用できます。
\end{datadesc}

\begin{datadesc}{linesep}
現在のプラットフォーム上で行を分割 (あるいは終端) するために用いられ
ている文字列です。この値は例えば \POSIX{} での\code{'\e n'} や Mac OS での
\code{'\e r'} のように、単一の文字にもなりますし、例えば DOS や Windows での
\code{'\e r\e n'} のように複数の文字列にもなります。
\end{datadesc}

\begin{datadesc}{devnull}
ヌルデバイス (null device) のファイルパスです。例えば\POSIX{} では
\code{'/dev/null'}、Mac OS 9 では\code{'Dev:Nul'} です。
この値は\module{os.path} からも利用できます。
\versionadded{2.4}
\end{datadesc}


\subsection{雑多な関数 \label{os-miscfunc}}

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

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