\section{Standard Module \sectcode{os}}

\stmodindex{os}
This module provides a more portable way of using operating system
(OS) dependent functionality than importing an OS dependent built-in
module like \code{posix}.

When the optional built-in module \code{posix} is available, this
module exports the same functions and data as \code{posix}; otherwise,
it searches for an OS dependent built-in module like \code{mac} and
exports the same functions and data as found there.  The design of all
Python's built-in OS dependent modules is such that as long as the same
functionality is available, it uses the same interface; e.g., the
function \code{os.stat(\var{file})} returns stat info about a \var{file} in a
format compatible with the POSIX interface.

Extensions peculiar to a particular OS are also available through the
\code{os} module, but using them is of course a threat to portability!

Note that after the first time \code{os} is imported, there is \emph{no}
performance penalty in using functions from \code{os} instead of
directly from the OS dependent built-in module, so there should be
\emph{no} reason not to use \code{os}!

In addition to whatever the correct OS dependent module exports, the
following variables and functions are always exported by \code{os}:

\renewcommand{\indexsubitem}{(in module os)}

\begin{datadesc}{name}
The name of the OS dependent module imported.  The following names
have currently been registered: \code{'posix'}, \code{'nt'},
\code{'dos'}, \code{'mac'}.
\end{datadesc}

\begin{datadesc}{path}
The corresponding OS dependent standard module for pathname
operations, e.g., \code{posixpath} or \code{macpath}.  Thus, (given
the proper imports), \code{os.path.split(\var{file})} is equivalent to but
more portable than \code{posixpath.split(\var{file})}.
\end{datadesc}

\begin{datadesc}{curdir}
The constant string used by the OS to refer to the current directory,
e.g. \code{'.'} for POSIX or \code{':'} for the Mac.
\end{datadesc}

\begin{datadesc}{pardir}
The constant string used by the OS to refer to the parent directory,
e.g. \code{'..'} for POSIX or \code{'::'} for the Mac.
\end{datadesc}

\begin{datadesc}{sep}
The character used by the OS to separate pathname components, e.g.\
\code{'/'} for POSIX or \code{':'} for the Mac.  Note that knowing this
is not sufficient to be able to parse or concatenate pathnames---better
use \code{os.path.split()} and \code{os.path.join()}---but it is
occasionally useful.
\end{datadesc}

\begin{datadesc}{pathsep}
The character conventionally used by the OS to separate search patch
components (as in \code{\$PATH}), e.g.\ \code{':'} for POSIX or
\code{';'} for MS-DOS.
\end{datadesc}

\begin{datadesc}{defpath}
The default search path used by \code{os.exec*p*()} if the environment
doesn't have a \code{'PATH'} key.
\end{datadesc}

\begin{funcdesc}{execl}{path\, arg0\, arg1\, ...}
This is equivalent to
\code{os.execv(\var{path}, (\var{arg0}, \var{arg1}, ...))}.
\end{funcdesc}

\begin{funcdesc}{execle}{path\, arg0\, arg1\, ...\, env}
This is equivalent to
\code{os.execve(\var{path}, (\var{arg0}, \var{arg1}, ...), \var{env})}.
\end{funcdesc}

\begin{funcdesc}{execlp}{path\, arg0\, arg1\, ...}
This is equivalent to
\code{os.execvp(\var{path}, (\var{arg0}, \var{arg1}, ...))}.
\end{funcdesc}

\begin{funcdesc}{execvp}{path\, args}
This is like \code{os.execv(\var{path}, \var{args})} but duplicates
the shell's actions in searching for an executable file in a list of
directories.  The directory list is obtained from
\code{os.environ['PATH']}.
\end{funcdesc}

\begin{funcdesc}{execvpe}{path\, args\, env}
This is a cross between \code{os.execve()} and \code{os.execvp()}.
The directory list is obtained from \code{\var{env}['PATH']}.
\end{funcdesc}

(The functions \code{os.execv()} and \code{execve()} are not
documented here, since they are implemented by the OS dependent
module.  If the OS dependent module doesn't define either of these,
the functions that rely on it will raise an exception.  They are
documented in the section on module \code{posix}, together with all
other functions that \code{os} imports from the OS dependent module.)
