diff options
Diffstat (limited to 'Doc/library/os.rst')
-rw-r--r-- | Doc/library/os.rst | 2036 |
1 files changed, 2036 insertions, 0 deletions
diff --git a/Doc/library/os.rst b/Doc/library/os.rst new file mode 100644 index 0000000000..5d057f1161 --- /dev/null +++ b/Doc/library/os.rst @@ -0,0 +1,2036 @@ + +:mod:`os` --- Miscellaneous operating system interfaces +======================================================= + +.. module:: os + :synopsis: Miscellaneous operating system interfaces. + + +This module provides a more portable way of using operating system dependent +functionality than importing a operating system dependent built-in module like +:mod:`posix` or :mod:`nt`. (If you just want to read or write a file see +:func:`open`, and if you want to manipulate paths, see the :mod:`os.path` +module.) + +This module searches for an operating system dependent built-in module like +:mod:`mac` or :mod:`posix` and exports the same functions and data as found +there. The design of all Python's built-in operating system dependent modules +is such that as long as the same functionality is available, it uses the same +interface; for example, the function ``os.stat(path)`` returns stat information +about *path* in the same format (which happens to have originated with the POSIX +interface). + +Extensions peculiar to a particular operating system are also available through +the :mod:`os` module, but using them is of course a threat to portability! + +Note that after the first time :mod:`os` is imported, there is *no* performance +penalty in using functions from :mod:`os` instead of directly from the operating +system dependent built-in module, so there should be *no* reason not to use +:mod:`os`! + +The :mod:`os` module contains many functions and data values. The items below +and in the following sub-sections are all available directly from the :mod:`os` +module. + +.. % 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. +.. % + + +.. exception:: error + + .. index:: module: errno + + This exception is raised when a function returns a system-related error (not for + illegal argument types or other incidental errors). This is also known as the + built-in exception :exc:`OSError`. The accompanying value is a pair containing + the numeric error code from :cdata:`errno` and the corresponding string, as + would be printed by the C function :cfunc:`perror`. See the module + :mod:`errno`, which contains names for the error codes defined by the underlying + operating system. + + When exceptions are classes, this exception carries two attributes, + :attr:`errno` and :attr:`strerror`. The first holds the value of the C + :cdata:`errno` variable, and the latter holds the corresponding error message + from :cfunc:`strerror`. For exceptions that involve a file system path (such as + :func:`chdir` or :func:`unlink`), the exception instance will contain a third + attribute, :attr:`filename`, which is the file name passed to the function. + + +.. data:: name + + The name of the operating system dependent module imported. The following names + have currently been registered: ``'posix'``, ``'nt'``, ``'mac'``, ``'os2'``, + ``'ce'``, ``'java'``, ``'riscos'``. + + +.. data:: path + + The corresponding operating system dependent standard module for pathname + operations, such as :mod:`posixpath` or :mod:`macpath`. Thus, given the proper + imports, ``os.path.split(file)`` is equivalent to but more portable than + ``posixpath.split(file)``. Note that this is also an importable module: it may + be imported directly as :mod:`os.path`. + + +.. _os-procinfo: + +Process Parameters +------------------ + +These functions and data items provide information and operate on the current +process and user. + + +.. data:: environ + + A mapping object representing the string environment. For example, + ``environ['HOME']`` is the pathname of your home directory (on some platforms), + and is equivalent to ``getenv("HOME")`` in C. + + This mapping is captured the first time the :mod:`os` module is imported, + typically during Python startup as part of processing :file:`site.py`. Changes + to the environment made after this time are not reflected in ``os.environ``, + except for changes made by modifying ``os.environ`` directly. + + If the platform supports the :func:`putenv` function, this mapping may be used + to modify the environment as well as query the environment. :func:`putenv` will + be called automatically when the mapping is modified. + + .. note:: + + Calling :func:`putenv` directly does not change ``os.environ``, so it's better + to modify ``os.environ``. + + .. note:: + + On some platforms, including FreeBSD and Mac OS X, setting ``environ`` may cause + memory leaks. Refer to the system documentation for :cfunc:`putenv`. + + If :func:`putenv` is not provided, a modified copy of this mapping may be + passed to the appropriate process-creation functions to cause child processes + to use a modified environment. + + If the platform supports the :func:`unsetenv` function, you can delete items in + this mapping to unset environment variables. :func:`unsetenv` will be called + automatically when an item is deleted from ``os.environ``. + + +.. function:: chdir(path) + fchdir(fd) + getcwd() + :noindex: + + These functions are described in :ref:`os-file-dir`. + + +.. function:: ctermid() + + Return the filename corresponding to the controlling terminal of the process. + Availability: Unix. + + +.. function:: getegid() + + Return the effective group id of the current process. This corresponds to the + 'set id' bit on the file being executed in the current process. Availability: + Unix. + + +.. function:: geteuid() + + .. index:: single: user; effective id + + Return the current process' effective user id. Availability: Unix. + + +.. function:: getgid() + + .. index:: single: process; group + + Return the real group id of the current process. Availability: Unix. + + +.. function:: getgroups() + + Return list of supplemental group ids associated with the current process. + Availability: Unix. + + +.. function:: getlogin() + + Return the name of the user logged in on the controlling terminal of the + process. For most purposes, it is more useful to use the environment variable + :envvar:`LOGNAME` to find out who the user is, or + ``pwd.getpwuid(os.getuid())[0]`` to get the login name of the currently + effective user ID. Availability: Unix. + + +.. function:: getpgid(pid) + + Return the process group id of the process with process id *pid*. If *pid* is 0, + the process group id of the current process is returned. Availability: Unix. + + .. versionadded:: 2.3 + + +.. function:: getpgrp() + + .. index:: single: process; group + + Return the id of the current process group. Availability: Unix. + + +.. function:: getpid() + + .. index:: single: process; id + + Return the current process id. Availability: Unix, Windows. + + +.. function:: getppid() + + .. index:: single: process; id of parent + + Return the parent's process id. Availability: Unix. + + +.. function:: getuid() + + .. index:: single: user; id + + Return the current process' user id. Availability: Unix. + + +.. function:: getenv(varname[, value]) + + Return the value of the environment variable *varname* if it exists, or *value* + if it doesn't. *value* defaults to ``None``. Availability: most flavors of + Unix, Windows. + + +.. function:: putenv(varname, value) + + .. index:: single: environment variables; setting + + Set the environment variable named *varname* to the string *value*. Such + changes to the environment affect subprocesses started with :func:`os.system`, + :func:`popen` or :func:`fork` and :func:`execv`. Availability: most flavors of + Unix, Windows. + + .. note:: + + On some platforms, including FreeBSD and Mac OS X, setting ``environ`` may cause + memory leaks. Refer to the system documentation for putenv. + + When :func:`putenv` is supported, assignments to items in ``os.environ`` are + automatically translated into corresponding calls to :func:`putenv`; however, + calls to :func:`putenv` don't update ``os.environ``, so it is actually + preferable to assign to items of ``os.environ``. + + +.. function:: setegid(egid) + + Set the current process's effective group id. Availability: Unix. + + +.. function:: seteuid(euid) + + Set the current process's effective user id. Availability: Unix. + + +.. function:: setgid(gid) + + Set the current process' group id. Availability: Unix. + + +.. function:: setgroups(groups) + + Set the list of supplemental group ids associated with the current process to + *groups*. *groups* must be a sequence, and each element must be an integer + identifying a group. This operation is typical available only to the superuser. + Availability: Unix. + + .. versionadded:: 2.2 + + +.. function:: setpgrp() + + Calls the system call :cfunc:`setpgrp` or :cfunc:`setpgrp(0, 0)` depending on + which version is implemented (if any). See the Unix manual for the semantics. + Availability: Unix. + + +.. function:: setpgid(pid, pgrp) + + Calls the system call :cfunc:`setpgid` to set the process group id of the + process with id *pid* to the process group with id *pgrp*. See the Unix manual + for the semantics. Availability: Unix. + + +.. function:: setreuid(ruid, euid) + + Set the current process's real and effective user ids. Availability: Unix. + + +.. function:: setregid(rgid, egid) + + Set the current process's real and effective group ids. Availability: Unix. + + +.. function:: getsid(pid) + + Calls the system call :cfunc:`getsid`. See the Unix manual for the semantics. + Availability: Unix. + + .. versionadded:: 2.4 + + +.. function:: setsid() + + Calls the system call :cfunc:`setsid`. See the Unix manual for the semantics. + Availability: Unix. + + +.. function:: setuid(uid) + + .. index:: single: user; id, setting + + Set the current process' user id. Availability: Unix. + +.. % placed in this section since it relates to errno.... a little weak + + +.. function:: strerror(code) + + Return the error message corresponding to the error code in *code*. + Availability: Unix, Windows. + + +.. function:: umask(mask) + + Set the current numeric umask and returns the previous umask. Availability: + Unix, Windows. + + +.. function:: uname() + + .. index:: + single: gethostname() (in module socket) + single: gethostbyaddr() (in module socket) + + Return a 5-tuple containing information identifying the current operating + system. The tuple contains 5 strings: ``(sysname, nodename, release, version, + machine)``. Some systems truncate the nodename to 8 characters or to the + leading component; a better way to get the hostname is + :func:`socket.gethostname` or even + ``socket.gethostbyaddr(socket.gethostname())``. Availability: recent flavors of + Unix. + + +.. function:: unsetenv(varname) + + .. index:: single: environment variables; deleting + + Unset (delete) the environment variable named *varname*. Such changes to the + environment affect subprocesses started with :func:`os.system`, :func:`popen` or + :func:`fork` and :func:`execv`. Availability: most flavors of Unix, Windows. + + When :func:`unsetenv` is supported, deletion of items in ``os.environ`` is + automatically translated into a corresponding call to :func:`unsetenv`; however, + calls to :func:`unsetenv` don't update ``os.environ``, so it is actually + preferable to delete items of ``os.environ``. + + +.. _os-newstreams: + +File Object Creation +-------------------- + +These functions create new file objects. (See also :func:`open`.) + + +.. function:: fdopen(fd[, mode[, bufsize]]) + + .. index:: single: I/O control; buffering + + Return an open file object connected to the file descriptor *fd*. The *mode* + and *bufsize* arguments have the same meaning as the corresponding arguments to + the built-in :func:`open` function. Availability: Macintosh, Unix, Windows. + + .. versionchanged:: 2.3 + When specified, the *mode* argument must now start with one of the letters + ``'r'``, ``'w'``, or ``'a'``, otherwise a :exc:`ValueError` is raised. + + .. versionchanged:: 2.5 + On Unix, when the *mode* argument starts with ``'a'``, the *O_APPEND* flag is + set on the file descriptor (which the :cfunc:`fdopen` implementation already + does on most platforms). + + +.. function:: popen(command[, mode[, bufsize]]) + + Open a pipe to or from *command*. The return value is an open file object + connected to the pipe, which can be read or written depending on whether *mode* + is ``'r'`` (default) or ``'w'``. The *bufsize* argument has the same meaning as + the corresponding argument to the built-in :func:`open` function. The exit + status of the command (encoded in the format specified for :func:`wait`) is + available as the return value of the :meth:`close` method of the file object, + except that when the exit status is zero (termination without errors), ``None`` + is returned. Availability: Macintosh, Unix, Windows. + + .. deprecated:: 2.6 + This function is obsolete. Use the :mod:`subprocess` module. + + .. versionchanged:: 2.0 + This function worked unreliably under Windows in earlier versions of Python. + This was due to the use of the :cfunc:`_popen` function from the libraries + provided with Windows. Newer versions of Python do not use the broken + implementation from the Windows libraries. + + +.. function:: tmpfile() + + Return a new file object opened in update mode (``w+b``). The file has no + directory entries associated with it and will be automatically deleted once + there are no file descriptors for the file. Availability: Macintosh, Unix, + Windows. + + +.. _os-fd-ops: + +File Descriptor Operations +-------------------------- + +These functions operate on I/O streams referenced using file descriptors. + +File descriptors are small integers corresponding to a file that has been opened +by the current process. For example, standard input is usually file descriptor +0, standard output is 1, and standard error is 2. Further files opened by a +process will then be assigned 3, 4, 5, and so forth. The name "file descriptor" +is slightly deceptive; on Unix platforms, sockets and pipes are also referenced +by file descriptors. + + +.. function:: close(fd) + + Close file descriptor *fd*. Availability: Macintosh, Unix, Windows. + + .. note:: + + This function is intended for low-level I/O and must be applied to a file + descriptor as returned by :func:`open` or :func:`pipe`. To close a "file + object" returned by the built-in function :func:`open` or by :func:`popen` or + :func:`fdopen`, use its :meth:`close` method. + + +.. function:: dup(fd) + + Return a duplicate of file descriptor *fd*. Availability: Macintosh, Unix, + Windows. + + +.. function:: dup2(fd, fd2) + + Duplicate file descriptor *fd* to *fd2*, closing the latter first if necessary. + Availability: Macintosh, Unix, Windows. + + +.. function:: fdatasync(fd) + + Force write of file with filedescriptor *fd* to disk. Does not force update of + metadata. Availability: Unix. + + +.. function:: fpathconf(fd, name) + + Return system configuration information relevant to an open file. *name* + specifies the configuration value to retrieve; it may be a string which is the + name of a defined system value; these names are specified in a number of + standards (POSIX.1, Unix 95, Unix 98, and others). Some platforms define + additional names as well. The names known to the host operating system are + given in the ``pathconf_names`` dictionary. For configuration variables not + included in that mapping, passing an integer for *name* is also accepted. + Availability: Macintosh, Unix. + + If *name* is a string and is not known, :exc:`ValueError` is raised. If a + specific value for *name* is not supported by the host system, even if it is + included in ``pathconf_names``, an :exc:`OSError` is raised with + :const:`errno.EINVAL` for the error number. + + +.. function:: fstat(fd) + + Return status for file descriptor *fd*, like :func:`stat`. Availability: + Macintosh, Unix, Windows. + + +.. function:: fstatvfs(fd) + + Return information about the filesystem containing the file associated with file + descriptor *fd*, like :func:`statvfs`. Availability: Unix. + + +.. function:: fsync(fd) + + Force write of file with filedescriptor *fd* to disk. On Unix, this calls the + native :cfunc:`fsync` function; on Windows, the MS :cfunc:`_commit` function. + + If you're starting with a Python file object *f*, first do ``f.flush()``, and + then do ``os.fsync(f.fileno())``, to ensure that all internal buffers associated + with *f* are written to disk. Availability: Macintosh, Unix, and Windows + starting in 2.2.3. + + +.. function:: ftruncate(fd, length) + + Truncate the file corresponding to file descriptor *fd*, so that it is at most + *length* bytes in size. Availability: Macintosh, Unix. + + +.. function:: isatty(fd) + + Return ``True`` if the file descriptor *fd* is open and connected to a + tty(-like) device, else ``False``. Availability: Macintosh, Unix. + + +.. function:: lseek(fd, pos, how) + + Set the current position of file descriptor *fd* to position *pos*, modified by + *how*: ``0`` to set the position relative to the beginning of the file; ``1`` to + set it relative to the current position; ``2`` to set it relative to the end of + the file. Availability: Macintosh, Unix, Windows. + + +.. function:: open(file, flags[, mode]) + + Open the file *file* and set various flags according to *flags* and possibly its + mode according to *mode*. The default *mode* is ``0777`` (octal), and the + current umask value is first masked out. Return the file descriptor for the + newly opened file. Availability: Macintosh, Unix, Windows. + + For a description of the flag and mode values, see the C run-time documentation; + flag constants (like :const:`O_RDONLY` and :const:`O_WRONLY`) are defined in + this module too (see below). + + .. note:: + + This function is intended for low-level I/O. For normal usage, use the built-in + function :func:`open`, which returns a "file object" with :meth:`read` and + :meth:`write` methods (and many more). To wrap a file descriptor in a "file + object", use :func:`fdopen`. + + +.. function:: openpty() + + .. index:: module: pty + + Open a new pseudo-terminal pair. Return a pair of file descriptors ``(master, + slave)`` for the pty and the tty, respectively. For a (slightly) more portable + approach, use the :mod:`pty` module. Availability: Macintosh, Some flavors of + Unix. + + +.. function:: pipe() + + Create a pipe. Return a pair of file descriptors ``(r, w)`` usable for reading + and writing, respectively. Availability: Macintosh, Unix, Windows. + + +.. function:: read(fd, n) + + Read at most *n* bytes from file descriptor *fd*. Return a string containing the + bytes read. If the end of the file referred to by *fd* has been reached, an + empty string is returned. Availability: Macintosh, Unix, Windows. + + .. note:: + + This function is intended for low-level I/O and must be applied to a file + descriptor as returned by :func:`open` or :func:`pipe`. To read a "file object" + returned by the built-in function :func:`open` or by :func:`popen` or + :func:`fdopen`, or ``sys.stdin``, use its :meth:`read` or :meth:`readline` + methods. + + +.. function:: tcgetpgrp(fd) + + Return the process group associated with the terminal given by *fd* (an open + file descriptor as returned by :func:`open`). Availability: Macintosh, Unix. + + +.. function:: tcsetpgrp(fd, pg) + + Set the process group associated with the terminal given by *fd* (an open file + descriptor as returned by :func:`open`) to *pg*. Availability: Macintosh, Unix. + + +.. function:: ttyname(fd) + + Return a string which specifies the terminal device associated with + file-descriptor *fd*. If *fd* is not associated with a terminal device, an + exception is raised. Availability:Macintosh, Unix. + + +.. function:: write(fd, str) + + Write the string *str* to file descriptor *fd*. Return the number of bytes + actually written. Availability: Macintosh, Unix, Windows. + + .. note:: + + This function is intended for low-level I/O and must be applied to a file + descriptor as returned by :func:`open` or :func:`pipe`. To write a "file + object" returned by the built-in function :func:`open` or by :func:`popen` or + :func:`fdopen`, or ``sys.stdout`` or ``sys.stderr``, use its :meth:`write` + method. + +The following data items are available for use in constructing the *flags* +parameter to the :func:`open` function. Some items will not be available on all +platforms. For descriptions of their availability and use, consult +:manpage:`open(2)`. + + +.. data:: O_RDONLY + O_WRONLY + O_RDWR + O_APPEND + O_CREAT + O_EXCL + O_TRUNC + + Options for the *flag* argument to the :func:`open` function. These can be + bit-wise OR'd together. Availability: Macintosh, Unix, Windows. + + +.. data:: O_DSYNC + O_RSYNC + O_SYNC + O_NDELAY + O_NONBLOCK + O_NOCTTY + O_SHLOCK + O_EXLOCK + + More options for the *flag* argument to the :func:`open` function. Availability: + Macintosh, Unix. + + +.. data:: O_BINARY + + Option for the *flag* argument to the :func:`open` function. This can be + bit-wise OR'd together with those listed above. Availability: Windows. + + .. % XXX need to check on the availability of this one. + + +.. data:: O_NOINHERIT + O_SHORT_LIVED + O_TEMPORARY + O_RANDOM + O_SEQUENTIAL + O_TEXT + + Options for the *flag* argument to the :func:`open` function. These can be + bit-wise OR'd together. Availability: Windows. + + +.. data:: SEEK_SET + SEEK_CUR + SEEK_END + + Parameters to the :func:`lseek` function. Their values are 0, 1, and 2, + respectively. Availability: Windows, Macintosh, Unix. + + .. versionadded:: 2.5 + + +.. _os-file-dir: + +Files and Directories +--------------------- + + +.. function:: access(path, mode) + + Use the real uid/gid to test for access to *path*. Note that most operations + will use the effective uid/gid, therefore this routine can be used in a + suid/sgid environment to test if the invoking user has the specified access to + *path*. *mode* should be :const:`F_OK` to test the existence of *path*, or it + can be the inclusive OR of one or more of :const:`R_OK`, :const:`W_OK`, and + :const:`X_OK` to test permissions. Return :const:`True` if access is allowed, + :const:`False` if not. See the Unix man page :manpage:`access(2)` for more + information. Availability: Macintosh, Unix, Windows. + + .. note:: + + Using :func:`access` to check if a user is authorized to e.g. open a file before + actually doing so using :func:`open` creates a security hole, because the user + might exploit the short time interval between checking and opening the file to + manipulate it. + + .. note:: + + I/O operations may fail even when :func:`access` indicates that they would + succeed, particularly for operations on network filesystems which may have + permissions semantics beyond the usual POSIX permission-bit model. + + +.. data:: F_OK + + Value to pass as the *mode* parameter of :func:`access` to test the existence of + *path*. + + +.. data:: R_OK + + Value to include in the *mode* parameter of :func:`access` to test the + readability of *path*. + + +.. data:: W_OK + + Value to include in the *mode* parameter of :func:`access` to test the + writability of *path*. + + +.. data:: X_OK + + Value to include in the *mode* parameter of :func:`access` to determine if + *path* can be executed. + + +.. function:: chdir(path) + + .. index:: single: directory; changing + + Change the current working directory to *path*. Availability: Macintosh, Unix, + Windows. + + +.. function:: fchdir(fd) + + Change the current working directory to the directory represented by the file + descriptor *fd*. The descriptor must refer to an opened directory, not an open + file. Availability: Unix. + + .. versionadded:: 2.3 + + +.. function:: getcwd() + + Return a string representing the current working directory. Availability: + Macintosh, Unix, Windows. + + +.. function:: getcwdu() + + Return a Unicode object representing the current working directory. + Availability: Macintosh, Unix, Windows. + + .. versionadded:: 2.3 + + +.. function:: chflags(path, flags) + + Set the flags of *path* to the numeric *flags*. *flags* may take a combination + (bitwise OR) of the following values (as defined in the :mod:`stat` module): + + * ``UF_NODUMP`` + * ``UF_IMMUTABLE`` + * ``UF_APPEND`` + * ``UF_OPAQUE`` + * ``UF_NOUNLINK`` + * ``SF_ARCHIVED`` + * ``SF_IMMUTABLE`` + * ``SF_APPEND`` + * ``SF_NOUNLINK`` + * ``SF_SNAPSHOT`` + + Availability: Macintosh, Unix. + + .. versionadded:: 2.6 + + +.. function:: chroot(path) + + Change the root directory of the current process to *path*. Availability: + Macintosh, Unix. + + .. versionadded:: 2.2 + + +.. function:: chmod(path, mode) + + Change the mode of *path* to the numeric *mode*. *mode* may take one of the + following values (as defined in the :mod:`stat` module) or bitwise or-ed + combinations of them: + + * ``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`` + + Availability: Macintosh, Unix, Windows. + + .. note:: + + Although Windows supports :func:`chmod`, you can only set the file's read-only + flag with it (via the ``stat.S_IWRITE`` and ``stat.S_IREAD`` + constants or a corresponding integer value). All other bits are + ignored. + + +.. function:: chown(path, uid, gid) + + Change the owner and group id of *path* to the numeric *uid* and *gid*. To leave + one of the ids unchanged, set it to -1. Availability: Macintosh, Unix. + + +.. function:: lchflags(path, flags) + + Set the flags of *path* to the numeric *flags*, like :func:`chflags`, but do not + follow symbolic links. Availability: Unix. + + .. versionadded:: 2.6 + + +.. function:: lchown(path, uid, gid) + + Change the owner and group id of *path* to the numeric *uid* and gid. This + function will not follow symbolic links. Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. function:: link(src, dst) + + Create a hard link pointing to *src* named *dst*. Availability: Macintosh, Unix. + + +.. function:: listdir(path) + + Return a list containing the names of the entries in the directory. The list is + in arbitrary order. It does not include the special entries ``'.'`` and + ``'..'`` even if they are present in the directory. Availability: Macintosh, + Unix, Windows. + + .. versionchanged:: 2.3 + On Windows NT/2k/XP and Unix, if *path* is a Unicode object, the result will be + a list of Unicode objects. + + +.. function:: lstat(path) + + Like :func:`stat`, but do not follow symbolic links. Availability: Macintosh, + Unix. + + +.. function:: mkfifo(path[, mode]) + + Create a FIFO (a named pipe) named *path* with numeric mode *mode*. The default + *mode* is ``0666`` (octal). The current umask value is first masked out from + the mode. Availability: Macintosh, Unix. + + FIFOs are pipes that can be accessed like regular files. FIFOs exist until they + are deleted (for example with :func:`os.unlink`). Generally, FIFOs are used as + rendezvous between "client" and "server" type processes: the server opens the + FIFO for reading, and the client opens it for writing. Note that :func:`mkfifo` + doesn't open the FIFO --- it just creates the rendezvous point. + + +.. function:: mknod(filename[, mode=0600, device]) + + Create a filesystem node (file, device special file or named pipe) named + *filename*. *mode* specifies both the permissions to use and the type of node to + be created, being combined (bitwise OR) with one of ``stat.S_IFREG``, + ``stat.S_IFCHR``, ``stat.S_IFBLK``, + and ``stat.S_IFIFO`` (those constants are available in :mod:`stat`). + For ``stat.S_IFCHR`` and + ``stat.S_IFBLK``, *device* defines the newly created device special file (probably using + :func:`os.makedev`), otherwise it is ignored. + + .. versionadded:: 2.3 + + +.. function:: major(device) + + Extracts the device major number from a raw device number (usually the + :attr:`st_dev` or :attr:`st_rdev` field from :ctype:`stat`). + + .. versionadded:: 2.3 + + +.. function:: minor(device) + + Extracts the device minor number from a raw device number (usually the + :attr:`st_dev` or :attr:`st_rdev` field from :ctype:`stat`). + + .. versionadded:: 2.3 + + +.. function:: makedev(major, minor) + + Composes a raw device number from the major and minor device numbers. + + .. versionadded:: 2.3 + + +.. function:: mkdir(path[, mode]) + + Create a directory named *path* with numeric mode *mode*. The default *mode* is + ``0777`` (octal). On some systems, *mode* is ignored. Where it is used, the + current umask value is first masked out. Availability: Macintosh, Unix, Windows. + + +.. function:: makedirs(path[, mode]) + + .. index:: + single: directory; creating + single: UNC paths; and os.makedirs() + + Recursive directory creation function. Like :func:`mkdir`, but makes all + intermediate-level directories needed to contain the leaf directory. Throws an + :exc:`error` exception if the leaf directory already exists or cannot be + created. The default *mode* is ``0777`` (octal). On some systems, *mode* is + ignored. Where it is used, the current umask value is first masked out. + + .. note:: + + :func:`makedirs` will become confused if the path elements to create include + *os.pardir*. + + .. versionadded:: 1.5.2 + + .. versionchanged:: 2.3 + This function now handles UNC paths correctly. + + +.. function:: pathconf(path, name) + + Return system configuration information relevant to a named file. *name* + specifies the configuration value to retrieve; it may be a string which is the + name of a defined system value; these names are specified in a number of + standards (POSIX.1, Unix 95, Unix 98, and others). Some platforms define + additional names as well. The names known to the host operating system are + given in the ``pathconf_names`` dictionary. For configuration variables not + included in that mapping, passing an integer for *name* is also accepted. + Availability: Macintosh, Unix. + + If *name* is a string and is not known, :exc:`ValueError` is raised. If a + specific value for *name* is not supported by the host system, even if it is + included in ``pathconf_names``, an :exc:`OSError` is raised with + :const:`errno.EINVAL` for the error number. + + +.. data:: pathconf_names + + Dictionary mapping names accepted by :func:`pathconf` and :func:`fpathconf` to + the integer values defined for those names by the host operating system. This + can be used to determine the set of names known to the system. Availability: + Macintosh, Unix. + + +.. function:: readlink(path) + + Return a string representing the path to which the symbolic link points. The + result may be either an absolute or relative pathname; if it is relative, it may + be converted to an absolute pathname using ``os.path.join(os.path.dirname(path), + result)``. + + .. versionchanged:: 2.6 + If the *path* is a Unicode object the result will also be a Unicode object. + + Availability: Macintosh, Unix. + + +.. function:: remove(path) + + Remove the file *path*. If *path* is a directory, :exc:`OSError` is raised; see + :func:`rmdir` below to remove a directory. This is identical to the + :func:`unlink` function documented below. On Windows, attempting to remove a + file that is in use causes an exception to be raised; on Unix, the directory + entry is removed but the storage allocated to the file is not made available + until the original file is no longer in use. Availability: Macintosh, Unix, + Windows. + + +.. function:: removedirs(path) + + .. index:: single: directory; deleting + + Removes directories recursively. Works like :func:`rmdir` except that, if the + leaf directory is successfully removed, :func:`removedirs` tries to + successively remove every parent directory mentioned in *path* until an error + is raised (which is ignored, because it generally means that a parent directory + is not empty). For example, ``os.removedirs('foo/bar/baz')`` will first remove + the directory ``'foo/bar/baz'``, and then remove ``'foo/bar'`` and ``'foo'`` if + they are empty. Raises :exc:`OSError` if the leaf directory could not be + successfully removed. + + .. versionadded:: 1.5.2 + + +.. function:: rename(src, dst) + + Rename the file or directory *src* to *dst*. If *dst* is a directory, + :exc:`OSError` will be raised. On Unix, if *dst* exists and is a file, it will + be removed silently if the user has permission. The operation may fail on some + Unix flavors if *src* and *dst* are on different filesystems. If successful, + the renaming will be an atomic operation (this is a POSIX requirement). On + Windows, if *dst* already exists, :exc:`OSError` will be raised even if it is a + file; there may be no way to implement an atomic rename when *dst* names an + existing file. Availability: Macintosh, Unix, Windows. + + +.. function:: renames(old, new) + + Recursive directory or file renaming function. Works like :func:`rename`, except + creation of any intermediate directories needed to make the new pathname good is + attempted first. After the rename, directories corresponding to rightmost path + segments of the old name will be pruned away using :func:`removedirs`. + + .. versionadded:: 1.5.2 + + .. note:: + + This function can fail with the new directory structure made if you lack + permissions needed to remove the leaf directory or file. + + +.. function:: rmdir(path) + + Remove the directory *path*. Availability: Macintosh, Unix, Windows. + + +.. function:: stat(path) + + Perform a :cfunc:`stat` system call on the given path. The return value is an + object whose attributes correspond to the members of the :ctype:`stat` + structure, namely: :attr:`st_mode` (protection bits), :attr:`st_ino` (inode + number), :attr:`st_dev` (device), :attr:`st_nlink` (number of hard links), + :attr:`st_uid` (user ID of owner), :attr:`st_gid` (group ID of owner), + :attr:`st_size` (size of file, in bytes), :attr:`st_atime` (time of most recent + access), :attr:`st_mtime` (time of most recent content modification), + :attr:`st_ctime` (platform dependent; time of most recent metadata change on + Unix, or the time of creation on Windows):: + + >>> import os + >>> statinfo = os.stat('somefile.txt') + >>> statinfo + (33188, 422511L, 769L, 1, 1032, 100, 926L, 1105022698,1105022732, 1105022732) + >>> statinfo.st_size + 926L + >>> + + .. versionchanged:: 2.3 + If :func:`stat_float_times` returns true, the time values are floats, measuring + seconds. Fractions of a second may be reported if the system supports that. On + Mac OS, the times are always floats. See :func:`stat_float_times` for further + discussion. + + On some Unix systems (such as Linux), the following attributes may also be + available: :attr:`st_blocks` (number of blocks allocated for file), + :attr:`st_blksize` (filesystem blocksize), :attr:`st_rdev` (type of device if an + inode device). :attr:`st_flags` (user defined flags for file). + + On other Unix systems (such as FreeBSD), the following attributes may be + available (but may be only filled out if root tries to use them): :attr:`st_gen` + (file generation number), :attr:`st_birthtime` (time of file creation). + + On Mac OS systems, the following attributes may also be available: + :attr:`st_rsize`, :attr:`st_creator`, :attr:`st_type`. + + On RISCOS systems, the following attributes are also available: :attr:`st_ftype` + (file type), :attr:`st_attrs` (attributes), :attr:`st_obtype` (object type). + + .. index:: module: stat + + For backward compatibility, the return value of :func:`stat` is also accessible + as a tuple of at least 10 integers giving the most important (and portable) + members of the :ctype:`stat` structure, in the order :attr:`st_mode`, + :attr:`st_ino`, :attr:`st_dev`, :attr:`st_nlink`, :attr:`st_uid`, + :attr:`st_gid`, :attr:`st_size`, :attr:`st_atime`, :attr:`st_mtime`, + :attr:`st_ctime`. More items may be added at the end by some implementations. + The standard module :mod:`stat` defines functions and constants that are useful + for extracting information from a :ctype:`stat` structure. (On Windows, some + items are filled with dummy values.) + + .. note:: + + The exact meaning and resolution of the :attr:`st_atime`, :attr:`st_mtime`, and + :attr:`st_ctime` members depends on the operating system and the file system. + For example, on Windows systems using the FAT or FAT32 file systems, + :attr:`st_mtime` has 2-second resolution, and :attr:`st_atime` has only 1-day + resolution. See your operating system documentation for details. + + Availability: Macintosh, Unix, Windows. + + .. versionchanged:: 2.2 + Added access to values as attributes of the returned object. + + .. versionchanged:: 2.5 + Added st_gen, st_birthtime. + + +.. function:: stat_float_times([newvalue]) + + Determine whether :class:`stat_result` represents time stamps as float objects. + If *newvalue* is ``True``, future calls to :func:`stat` return floats, if it is + ``False``, future calls return ints. If *newvalue* is omitted, return the + current setting. + + For compatibility with older Python versions, accessing :class:`stat_result` as + a tuple always returns integers. + + .. versionchanged:: 2.5 + Python now returns float values by default. Applications which do not work + correctly with floating point time stamps can use this function to restore the + old behaviour. + + The resolution of the timestamps (that is the smallest possible fraction) + depends on the system. Some systems only support second resolution; on these + systems, the fraction will always be zero. + + It is recommended that this setting is only changed at program startup time in + the *__main__* module; libraries should never change this setting. If an + application uses a library that works incorrectly if floating point time stamps + are processed, this application should turn the feature off until the library + has been corrected. + + +.. function:: statvfs(path) + + Perform a :cfunc:`statvfs` system call on the given path. The return value is + an object whose attributes describe the filesystem on the given path, and + correspond to the members of the :ctype:`statvfs` structure, namely: + :attr:`f_bsize`, :attr:`f_frsize`, :attr:`f_blocks`, :attr:`f_bfree`, + :attr:`f_bavail`, :attr:`f_files`, :attr:`f_ffree`, :attr:`f_favail`, + :attr:`f_flag`, :attr:`f_namemax`. Availability: Unix. + + .. index:: module: statvfs + + For backward compatibility, the return value is also accessible as a tuple whose + values correspond to the attributes, in the order given above. The standard + module :mod:`statvfs` defines constants that are useful for extracting + information from a :ctype:`statvfs` structure when accessing it as a sequence; + this remains useful when writing code that needs to work with versions of Python + that don't support accessing the fields as attributes. + + .. versionchanged:: 2.2 + Added access to values as attributes of the returned object. + + +.. function:: symlink(src, dst) + + Create a symbolic link pointing to *src* named *dst*. Availability: Unix. + + +.. function:: tempnam([dir[, prefix]]) + + Return a unique path name that is reasonable for creating a temporary file. + This will be an absolute path that names a potential directory entry in the + directory *dir* or a common location for temporary files if *dir* is omitted or + ``None``. If given and not ``None``, *prefix* is used to provide a short prefix + to the filename. Applications are responsible for properly creating and + managing files created using paths returned by :func:`tempnam`; no automatic + cleanup is provided. On Unix, the environment variable :envvar:`TMPDIR` + overrides *dir*, while on Windows the :envvar:`TMP` is used. The specific + behavior of this function depends on the C library implementation; some aspects + are underspecified in system documentation. + + .. warning:: + + Use of :func:`tempnam` is vulnerable to symlink attacks; consider using + :func:`tmpfile` (section :ref:`os-newstreams`) instead. + + Availability: Macintosh, Unix, Windows. + + +.. function:: tmpnam() + + Return a unique path name that is reasonable for creating a temporary file. + This will be an absolute path that names a potential directory entry in a common + location for temporary files. Applications are responsible for properly + creating and managing files created using paths returned by :func:`tmpnam`; no + automatic cleanup is provided. + + .. warning:: + + Use of :func:`tmpnam` is vulnerable to symlink attacks; consider using + :func:`tmpfile` (section :ref:`os-newstreams`) instead. + + Availability: Unix, Windows. This function probably shouldn't be used on + Windows, though: Microsoft's implementation of :func:`tmpnam` always creates a + name in the root directory of the current drive, and that's generally a poor + location for a temp file (depending on privileges, you may not even be able to + open a file using this name). + + +.. data:: TMP_MAX + + The maximum number of unique names that :func:`tmpnam` will generate before + reusing names. + + +.. function:: unlink(path) + + Remove the file *path*. This is the same function as :func:`remove`; the + :func:`unlink` name is its traditional Unix name. Availability: Macintosh, Unix, + Windows. + + +.. function:: utime(path, times) + + Set the access and modified times of the file specified by *path*. If *times* is + ``None``, then the file's access and modified times are set to the current time. + Otherwise, *times* must be a 2-tuple of numbers, of the form ``(atime, mtime)`` + which is used to set the access and modified times, respectively. Whether a + directory can be given for *path* depends on whether the operating system + implements directories as files (for example, Windows does not). Note that the + exact times you set here may not be returned by a subsequent :func:`stat` call, + depending on the resolution with which your operating system records access and + modification times; see :func:`stat`. + + .. versionchanged:: 2.0 + Added support for ``None`` for *times*. + + Availability: Macintosh, Unix, Windows. + + +.. function:: walk(top[, topdown=True [, onerror=None[, followlinks=False]]]) + + .. index:: + single: directory; walking + single: directory; traversal + + :func:`walk` generates the file names in a directory tree, by walking the tree + either top down or bottom up. For each directory in the tree rooted at directory + *top* (including *top* itself), it yields a 3-tuple ``(dirpath, dirnames, + filenames)``. + + *dirpath* is a string, the path to the directory. *dirnames* is a list of the + names of the subdirectories in *dirpath* (excluding ``'.'`` and ``'..'``). + *filenames* is a list of the names of the non-directory files in *dirpath*. + Note that the names in the lists contain no path components. To get a full path + (which begins with *top*) to a file or directory in *dirpath*, do + ``os.path.join(dirpath, name)``. + + If optional argument *topdown* is true or not specified, the triple for a + directory is generated before the triples for any of its subdirectories + (directories are generated top down). If *topdown* is false, the triple for a + directory is generated after the triples for all of its subdirectories + (directories are generated bottom up). + + When *topdown* is true, the caller can modify the *dirnames* list in-place + (perhaps using :keyword:`del` or slice assignment), and :func:`walk` will only + recurse into the subdirectories whose names remain in *dirnames*; this can be + used to prune the search, impose a specific order of visiting, or even to inform + :func:`walk` about directories the caller creates or renames before it resumes + :func:`walk` again. Modifying *dirnames* when *topdown* is false is + ineffective, because in bottom-up mode the directories in *dirnames* are + generated before *dirpath* itself is generated. + + By default errors from the ``os.listdir()`` call are ignored. If optional + argument *onerror* is specified, it should be a function; it will be called with + one argument, an :exc:`OSError` instance. It can report the error to continue + with the walk, or raise the exception to abort the walk. Note that the filename + is available as the ``filename`` attribute of the exception object. + + By default, :func:`walk` will not walk down into symbolic links that resolve to + directories. Set *followlinks* to True to visit directories pointed to by + symlinks, on systems that support them. + + .. versionadded:: 2.6 + The *followlinks* parameter. + + .. note:: + + Be aware that setting *followlinks* to true can lead to infinite recursion if a + link points to a parent directory of itself. :func:`walk` does not keep track of + the directories it visited already. + + .. note:: + + If you pass a relative pathname, don't change the current working directory + between resumptions of :func:`walk`. :func:`walk` never changes the current + directory, and assumes that its caller doesn't either. + + This example displays the number of bytes taken by non-directory files in each + directory under the starting directory, except that it doesn't look under any + CVS subdirectory:: + + 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 + + In the next example, walking the tree bottom up is essential: :func:`rmdir` + doesn't allow deleting a directory before the directory is empty:: + + # 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)) + + .. versionadded:: 2.3 + + +.. _os-process: + +Process Management +------------------ + +These functions may be used to create and manage processes. + +The various :func:`exec\*` functions take a list of arguments for the new +program loaded into the process. In each case, the first of these arguments is +passed to the new program as its own name rather than as an argument a user may +have typed on a command line. For the C programmer, this is the ``argv[0]`` +passed to a program's :cfunc:`main`. For example, ``os.execv('/bin/echo', +['foo', 'bar'])`` will only print ``bar`` on standard output; ``foo`` will seem +to be ignored. + + +.. function:: abort() + + Generate a :const:`SIGABRT` signal to the current process. On Unix, the default + behavior is to produce a core dump; on Windows, the process immediately returns + an exit code of ``3``. Be aware that programs which use :func:`signal.signal` + to register a handler for :const:`SIGABRT` will behave differently. + Availability: Macintosh, Unix, Windows. + + +.. function:: execl(path, arg0, arg1, ...) + execle(path, arg0, arg1, ..., env) + execlp(file, arg0, arg1, ...) + execlpe(file, arg0, arg1, ..., env) + execv(path, args) + execve(path, args, env) + execvp(file, args) + execvpe(file, args, env) + + These functions all execute a new program, replacing the current process; they + do not return. On Unix, the new executable is loaded into the current process, + and will have the same process ID as the caller. Errors will be reported as + :exc:`OSError` exceptions. + + The ``'l'`` and ``'v'`` variants of the :func:`exec\*` functions differ in how + command-line arguments are passed. The ``'l'`` variants are perhaps the easiest + to work with if the number of parameters is fixed when the code is written; the + individual parameters simply become additional parameters to the :func:`execl\*` + functions. The ``'v'`` variants are good when the number of parameters is + variable, with the arguments being passed in a list or tuple as the *args* + parameter. In either case, the arguments to the child process should start with + the name of the command being run, but this is not enforced. + + The variants which include a ``'p'`` near the end (:func:`execlp`, + :func:`execlpe`, :func:`execvp`, and :func:`execvpe`) will use the + :envvar:`PATH` environment variable to locate the program *file*. When the + environment is being replaced (using one of the :func:`exec\*e` variants, + discussed in the next paragraph), the new environment is used as the source of + the :envvar:`PATH` variable. The other variants, :func:`execl`, :func:`execle`, + :func:`execv`, and :func:`execve`, will not use the :envvar:`PATH` variable to + locate the executable; *path* must contain an appropriate absolute or relative + path. + + For :func:`execle`, :func:`execlpe`, :func:`execve`, and :func:`execvpe` (note + that these all end in ``'e'``), the *env* parameter must be a mapping which is + used to define the environment variables for the new process; the :func:`execl`, + :func:`execlp`, :func:`execv`, and :func:`execvp` all cause the new process to + inherit the environment of the current process. Availability: Macintosh, Unix, + Windows. + + +.. function:: _exit(n) + + Exit to the system with status *n*, without calling cleanup handlers, flushing + stdio buffers, etc. Availability: Macintosh, Unix, Windows. + + .. note:: + + The standard way to exit is ``sys.exit(n)``. :func:`_exit` should normally only + be used in the child process after a :func:`fork`. + +The following exit codes are a defined, and can be used with :func:`_exit`, +although they are not required. These are typically used for system programs +written in Python, such as a mail server's external command delivery program. + +.. note:: + + Some of these may not be available on all Unix platforms, since there is some + variation. These constants are defined where they are defined by the underlying + platform. + + +.. data:: EX_OK + + Exit code that means no error occurred. Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_USAGE + + Exit code that means the command was used incorrectly, such as when the wrong + number of arguments are given. Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_DATAERR + + Exit code that means the input data was incorrect. Availability: Macintosh, + Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_NOINPUT + + Exit code that means an input file did not exist or was not readable. + Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_NOUSER + + Exit code that means a specified user did not exist. Availability: Macintosh, + Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_NOHOST + + Exit code that means a specified host did not exist. Availability: Macintosh, + Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_UNAVAILABLE + + Exit code that means that a required service is unavailable. Availability: + Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_SOFTWARE + + Exit code that means an internal software error was detected. Availability: + Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_OSERR + + Exit code that means an operating system error was detected, such as the + inability to fork or create a pipe. Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_OSFILE + + Exit code that means some system file did not exist, could not be opened, or had + some other kind of error. Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_CANTCREAT + + Exit code that means a user specified output file could not be created. + Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_IOERR + + Exit code that means that an error occurred while doing I/O on some file. + Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_TEMPFAIL + + Exit code that means a temporary failure occurred. This indicates something + that may not really be an error, such as a network connection that couldn't be + made during a retryable operation. Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_PROTOCOL + + Exit code that means that a protocol exchange was illegal, invalid, or not + understood. Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_NOPERM + + Exit code that means that there were insufficient permissions to perform the + operation (but not intended for file system problems). Availability: Macintosh, + Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_CONFIG + + Exit code that means that some kind of configuration error occurred. + Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. data:: EX_NOTFOUND + + Exit code that means something like "an entry was not found". Availability: + Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. function:: fork() + + Fork a child process. Return ``0`` in the child, the child's process id in the + parent. Availability: Macintosh, Unix. + + +.. function:: forkpty() + + Fork a child process, using a new pseudo-terminal as the child's controlling + terminal. Return a pair of ``(pid, fd)``, where *pid* is ``0`` in the child, the + new child's process id in the parent, and *fd* is the file descriptor of the + master end of the pseudo-terminal. For a more portable approach, use the + :mod:`pty` module. Availability: Macintosh, Some flavors of Unix. + + +.. function:: kill(pid, sig) + + .. index:: + single: process; killing + single: process; signalling + + Send signal *sig* to the process *pid*. Constants for the specific signals + available on the host platform are defined in the :mod:`signal` module. + Availability: Macintosh, Unix. + + +.. function:: killpg(pgid, sig) + + .. index:: + single: process; killing + single: process; signalling + + Send the signal *sig* to the process group *pgid*. Availability: Macintosh, + Unix. + + .. versionadded:: 2.3 + + +.. function:: nice(increment) + + Add *increment* to the process's "niceness". Return the new niceness. + Availability: Macintosh, Unix. + + +.. function:: plock(op) + + Lock program segments into memory. The value of *op* (defined in + ``<sys/lock.h>``) determines which segments are locked. Availability: Macintosh, + Unix. + + +.. function:: popen(...) + :noindex: + + Run child processes, returning opened pipes for communications. These functions + are described in section :ref:`os-newstreams`. + + +.. function:: spawnl(mode, path, ...) + spawnle(mode, path, ..., env) + spawnlp(mode, file, ...) + spawnlpe(mode, file, ..., env) + spawnv(mode, path, args) + spawnve(mode, path, args, env) + spawnvp(mode, file, args) + spawnvpe(mode, file, args, env) + + Execute the program *path* in a new process. + + (Note that the :mod:`subprocess` module provides more powerful facilities for + spawning new processes and retrieving their results; using that module is + preferable to using these functions.) + + If *mode* is :const:`P_NOWAIT`, this function returns the process ID of the new + process; if *mode* is :const:`P_WAIT`, returns the process's exit code if it + exits normally, or ``-signal``, where *signal* is the signal that killed the + process. On Windows, the process ID will actually be the process handle, so can + be used with the :func:`waitpid` function. + + The ``'l'`` and ``'v'`` variants of the :func:`spawn\*` functions differ in how + command-line arguments are passed. The ``'l'`` variants are perhaps the easiest + to work with if the number of parameters is fixed when the code is written; the + individual parameters simply become additional parameters to the + :func:`spawnl\*` functions. The ``'v'`` variants are good when the number of + parameters is variable, with the arguments being passed in a list or tuple as + the *args* parameter. In either case, the arguments to the child process must + start with the name of the command being run. + + The variants which include a second ``'p'`` near the end (:func:`spawnlp`, + :func:`spawnlpe`, :func:`spawnvp`, and :func:`spawnvpe`) will use the + :envvar:`PATH` environment variable to locate the program *file*. When the + environment is being replaced (using one of the :func:`spawn\*e` variants, + discussed in the next paragraph), the new environment is used as the source of + the :envvar:`PATH` variable. The other variants, :func:`spawnl`, + :func:`spawnle`, :func:`spawnv`, and :func:`spawnve`, will not use the + :envvar:`PATH` variable to locate the executable; *path* must contain an + appropriate absolute or relative path. + + For :func:`spawnle`, :func:`spawnlpe`, :func:`spawnve`, and :func:`spawnvpe` + (note that these all end in ``'e'``), the *env* parameter must be a mapping + which is used to define the environment variables for the new process; the + :func:`spawnl`, :func:`spawnlp`, :func:`spawnv`, and :func:`spawnvp` all cause + the new process to inherit the environment of the current process. + + As an example, the following calls to :func:`spawnlp` and :func:`spawnvpe` are + equivalent:: + + 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) + + Availability: Unix, Windows. :func:`spawnlp`, :func:`spawnlpe`, :func:`spawnvp` + and :func:`spawnvpe` are not available on Windows. + + .. versionadded:: 1.6 + + +.. data:: P_NOWAIT + P_NOWAITO + + Possible values for the *mode* parameter to the :func:`spawn\*` family of + functions. If either of these values is given, the :func:`spawn\*` functions + will return as soon as the new process has been created, with the process ID as + the return value. Availability: Macintosh, Unix, Windows. + + .. versionadded:: 1.6 + + +.. data:: P_WAIT + + Possible value for the *mode* parameter to the :func:`spawn\*` family of + functions. If this is given as *mode*, the :func:`spawn\*` functions will not + return until the new process has run to completion and will return the exit code + of the process the run is successful, or ``-signal`` if a signal kills the + process. Availability: Macintosh, Unix, Windows. + + .. versionadded:: 1.6 + + +.. data:: P_DETACH + P_OVERLAY + + Possible values for the *mode* parameter to the :func:`spawn\*` family of + functions. These are less portable than those listed above. :const:`P_DETACH` + is similar to :const:`P_NOWAIT`, but the new process is detached from the + console of the calling process. If :const:`P_OVERLAY` is used, the current + process will be replaced; the :func:`spawn\*` function will not return. + Availability: Windows. + + .. versionadded:: 1.6 + + +.. function:: startfile(path[, operation]) + + Start a file with its associated application. + + When *operation* is not specified or ``'open'``, this acts like double-clicking + the file in Windows Explorer, or giving the file name as an argument to the + :program:`start` command from the interactive command shell: the file is opened + with whatever application (if any) its extension is associated. + + When another *operation* is given, it must be a "command verb" that specifies + what should be done with the file. Common verbs documented by Microsoft are + ``'print'`` and ``'edit'`` (to be used on files) as well as ``'explore'`` and + ``'find'`` (to be used on directories). + + :func:`startfile` returns as soon as the associated application is launched. + There is no option to wait for the application to close, and no way to retrieve + the application's exit status. The *path* parameter is relative to the current + directory. If you want to use an absolute path, make sure the first character + is not a slash (``'/'``); the underlying Win32 :cfunc:`ShellExecute` function + doesn't work if it is. Use the :func:`os.path.normpath` function to ensure that + the path is properly encoded for Win32. Availability: Windows. + + .. versionadded:: 2.0 + + .. versionadded:: 2.5 + The *operation* parameter. + + +.. function:: system(command) + + Execute the command (a string) in a subshell. This is implemented by calling + the Standard C function :cfunc:`system`, and has the same limitations. Changes + to ``posix.environ``, ``sys.stdin``, etc. are not reflected in the environment + of the executed command. + + On Unix, the return value is the exit status of the process encoded in the + format specified for :func:`wait`. Note that POSIX does not specify the meaning + of the return value of the C :cfunc:`system` function, so the return value of + the Python function is system-dependent. + + On Windows, the return value is that returned by the system shell after running + *command*, given by the Windows environment variable :envvar:`COMSPEC`: on + :program:`command.com` systems (Windows 95, 98 and ME) this is always ``0``; on + :program:`cmd.exe` systems (Windows NT, 2000 and XP) this is the exit status of + the command run; on systems using a non-native shell, consult your shell + documentation. + + Availability: Macintosh, Unix, Windows. + + The :mod:`subprocess` module provides more powerful facilities for spawning new + processes and retrieving their results; using that module is preferable to using + this function. + + +.. function:: times() + + Return a 5-tuple of floating point numbers indicating accumulated (processor or + other) times, in seconds. The items are: user time, system time, children's + user time, children's system time, and elapsed real time since a fixed point in + the past, in that order. See the Unix manual page :manpage:`times(2)` or the + corresponding Windows Platform API documentation. Availability: Macintosh, Unix, + Windows. + + +.. function:: wait() + + Wait for completion of a child process, and return a tuple containing its pid + and exit status indication: a 16-bit number, whose low byte is the signal number + that killed the process, and whose high byte is the exit status (if the signal + number is zero); the high bit of the low byte is set if a core file was + produced. Availability: Macintosh, Unix. + + +.. function:: waitpid(pid, options) + + The details of this function differ on Unix and Windows. + + On Unix: Wait for completion of a child process given by process id *pid*, and + return a tuple containing its process id and exit status indication (encoded as + for :func:`wait`). The semantics of the call are affected by the value of the + integer *options*, which should be ``0`` for normal operation. + + If *pid* is greater than ``0``, :func:`waitpid` requests status information for + that specific process. If *pid* is ``0``, the request is for the status of any + child in the process group of the current process. If *pid* is ``-1``, the + request pertains to any child of the current process. If *pid* is less than + ``-1``, status is requested for any process in the process group ``-pid`` (the + absolute value of *pid*). + + On Windows: Wait for completion of a process given by process handle *pid*, and + return a tuple containing *pid*, and its exit status shifted left by 8 bits + (shifting makes cross-platform use of the function easier). A *pid* less than or + equal to ``0`` has no special meaning on Windows, and raises an exception. The + value of integer *options* has no effect. *pid* can refer to any process whose + id is known, not necessarily a child process. The :func:`spawn` functions called + with :const:`P_NOWAIT` return suitable process handles. + + +.. function:: wait3([options]) + + Similar to :func:`waitpid`, except no process id argument is given and a + 3-element tuple containing the child's process id, exit status indication, and + resource usage information is returned. Refer to :mod:`resource`.\ + :func:`getrusage` for details on resource usage information. The option + argument is the same as that provided to :func:`waitpid` and :func:`wait4`. + Availability: Unix. + + .. versionadded:: 2.5 + + +.. function:: wait4(pid, options) + + Similar to :func:`waitpid`, except a 3-element tuple, containing the child's + process id, exit status indication, and resource usage information is returned. + Refer to :mod:`resource`.\ :func:`getrusage` for details on resource usage + information. The arguments to :func:`wait4` are the same as those provided to + :func:`waitpid`. Availability: Unix. + + .. versionadded:: 2.5 + + +.. data:: WNOHANG + + The option for :func:`waitpid` to return immediately if no child process status + is available immediately. The function returns ``(0, 0)`` in this case. + Availability: Macintosh, Unix. + + +.. data:: WCONTINUED + + This option causes child processes to be reported if they have been continued + from a job control stop since their status was last reported. Availability: Some + Unix systems. + + .. versionadded:: 2.3 + + +.. data:: WUNTRACED + + This option causes child processes to be reported if they have been stopped but + their current state has not been reported since they were stopped. Availability: + Macintosh, Unix. + + .. versionadded:: 2.3 + +The following functions take a process status code as returned by +:func:`system`, :func:`wait`, or :func:`waitpid` as a parameter. They may be +used to determine the disposition of a process. + + +.. function:: WCOREDUMP(status) + + Returns ``True`` if a core dump was generated for the process, otherwise it + returns ``False``. Availability: Macintosh, Unix. + + .. versionadded:: 2.3 + + +.. function:: WIFCONTINUED(status) + + Returns ``True`` if the process has been continued from a job control stop, + otherwise it returns ``False``. Availability: Unix. + + .. versionadded:: 2.3 + + +.. function:: WIFSTOPPED(status) + + Returns ``True`` if the process has been stopped, otherwise it returns + ``False``. Availability: Unix. + + +.. function:: WIFSIGNALED(status) + + Returns ``True`` if the process exited due to a signal, otherwise it returns + ``False``. Availability: Macintosh, Unix. + + +.. function:: WIFEXITED(status) + + Returns ``True`` if the process exited using the :manpage:`exit(2)` system call, + otherwise it returns ``False``. Availability: Macintosh, Unix. + + +.. function:: WEXITSTATUS(status) + + If ``WIFEXITED(status)`` is true, return the integer parameter to the + :manpage:`exit(2)` system call. Otherwise, the return value is meaningless. + Availability: Macintosh, Unix. + + +.. function:: WSTOPSIG(status) + + Return the signal which caused the process to stop. Availability: Macintosh, + Unix. + + +.. function:: WTERMSIG(status) + + Return the signal which caused the process to exit. Availability: Macintosh, + Unix. + + +.. _os-path: + +Miscellaneous System Information +-------------------------------- + + +.. function:: confstr(name) + + Return string-valued system configuration values. *name* specifies the + configuration value to retrieve; it may be a string which is the name of a + defined system value; these names are specified in a number of standards (POSIX, + Unix 95, Unix 98, and others). Some platforms define additional names as well. + The names known to the host operating system are given as the keys of the + ``confstr_names`` dictionary. For configuration variables not included in that + mapping, passing an integer for *name* is also accepted. Availability: + Macintosh, Unix. + + If the configuration value specified by *name* isn't defined, ``None`` is + returned. + + If *name* is a string and is not known, :exc:`ValueError` is raised. If a + specific value for *name* is not supported by the host system, even if it is + included in ``confstr_names``, an :exc:`OSError` is raised with + :const:`errno.EINVAL` for the error number. + + +.. data:: confstr_names + + Dictionary mapping names accepted by :func:`confstr` to the integer values + defined for those names by the host operating system. This can be used to + determine the set of names known to the system. Availability: Macintosh, Unix. + + +.. function:: getloadavg() + + Return the number of processes in the system run queue averaged over the last 1, + 5, and 15 minutes or raises :exc:`OSError` if the load average was + unobtainable. + + .. versionadded:: 2.3 + + +.. function:: sysconf(name) + + Return integer-valued system configuration values. If the configuration value + specified by *name* isn't defined, ``-1`` is returned. The comments regarding + the *name* parameter for :func:`confstr` apply here as well; the dictionary that + provides information on the known names is given by ``sysconf_names``. + Availability: Macintosh, Unix. + + +.. data:: sysconf_names + + Dictionary mapping names accepted by :func:`sysconf` to the integer values + defined for those names by the host operating system. This can be used to + determine the set of names known to the system. Availability: Macintosh, Unix. + +The follow data values are used to support path manipulation operations. These +are defined for all platforms. + +Higher-level operations on pathnames are defined in the :mod:`os.path` module. + + +.. data:: curdir + + The constant string used by the operating system to refer to the current + directory. For example: ``'.'`` for POSIX or ``':'`` for Mac OS 9. Also + available via :mod:`os.path`. + + +.. data:: pardir + + The constant string used by the operating system to refer to the parent + directory. For example: ``'..'`` for POSIX or ``'::'`` for Mac OS 9. Also + available via :mod:`os.path`. + + +.. data:: sep + + The character used by the operating system to separate pathname components, for + example, ``'/'`` for POSIX or ``':'`` for Mac OS 9. Note that knowing this is + not sufficient to be able to parse or concatenate pathnames --- use + :func:`os.path.split` and :func:`os.path.join` --- but it is occasionally + useful. Also available via :mod:`os.path`. + + +.. data:: altsep + + An alternative character used by the operating system to separate pathname + components, or ``None`` if only one separator character exists. This is set to + ``'/'`` on Windows systems where ``sep`` is a backslash. Also available via + :mod:`os.path`. + + +.. data:: extsep + + The character which separates the base filename from the extension; for example, + the ``'.'`` in :file:`os.py`. Also available via :mod:`os.path`. + + .. versionadded:: 2.2 + + +.. data:: pathsep + + The character conventionally used by the operating system to separate search + path components (as in :envvar:`PATH`), such as ``':'`` for POSIX or ``';'`` for + Windows. Also available via :mod:`os.path`. + + +.. data:: defpath + + The default search path used by :func:`exec\*p\*` and :func:`spawn\*p\*` if the + environment doesn't have a ``'PATH'`` key. Also available via :mod:`os.path`. + + +.. data:: linesep + + The string used to separate (or, rather, terminate) lines on the current + platform. This may be a single character, such as ``'\n'`` for POSIX or + ``'\r'`` for Mac OS, or multiple characters, for example, ``'\r\n'`` for + Windows. Do not use *os.linesep* as a line terminator when writing files opened + in text mode (the default); use a single ``'\n'`` instead, on all platforms. + + +.. data:: devnull + + The file path of the null device. For example: ``'/dev/null'`` for POSIX or + ``'Dev:Nul'`` for Mac OS 9. Also available via :mod:`os.path`. + + .. versionadded:: 2.4 + + +.. _os-miscfunc: + +Miscellaneous Functions +----------------------- + + +.. function:: urandom(n) + + Return a string of *n* random bytes suitable for cryptographic use. + + This function returns random bytes from an OS-specific randomness source. The + returned data should be unpredictable enough for cryptographic applications, + though its exact quality depends on the OS implementation. On a UNIX-like + system this will query /dev/urandom, and on Windows it will use CryptGenRandom. + If a randomness source is not found, :exc:`NotImplementedError` will be raised. + + .. versionadded:: 2.4 + |