\section{\module{subprocess} --- Subprocess management}

\declaremodule{standard}{subprocess}
\modulesynopsis{Subprocess management.}
\moduleauthor{Peter \AA strand}{astrand@lysator.liu.se}
\sectionauthor{Peter \AA strand}{astrand@lysator.liu.se}

\versionadded{2.4}

The \module{subprocess} module allows you to spawn new processes,
connect to their input/output/error pipes, and obtain their return
codes.  This module intends to replace several other, older modules
and functions, such as:

% XXX Should add pointers to this module to at least the popen2
% and commands sections.

\begin{verbatim}
os.system
os.spawn*
os.popen*
popen2.*
commands.*
\end{verbatim}

Information about how the \module{subprocess} module can be used to
replace these modules and functions can be found in the following
sections.

\subsection{Using the subprocess Module}

This module defines one class called \class{Popen}:

\begin{classdesc}{Popen}{args, bufsize=0, executable=None,
            stdin=None, stdout=None, stderr=None,
            preexec_fn=None, close_fds=False, shell=False,
            cwd=None, env=None, universal_newlines=False,
            startupinfo=None, creationflags=0}

Arguments are:

\var{args} should be a string, or a sequence of program arguments.  The
program to execute is normally the first item in the args sequence or
string, but can be explicitly set by using the executable argument.

On \UNIX{}, with \var{shell=False} (default): In this case, the Popen
class uses \method{os.execvp()} to execute the child program.
\var{args} should normally be a sequence.  A string will be treated as a
sequence with the string as the only item (the program to execute).

On \UNIX{}, with \var{shell=True}: If args is a string, it specifies the
command string to execute through the shell.  If \var{args} is a
sequence, the first item specifies the command string, and any
additional items will be treated as additional shell arguments.

On Windows: the \class{Popen} class uses CreateProcess() to execute
the child program, which operates on strings.  If \var{args} is a
sequence, it will be converted to a string using the
\method{list2cmdline} method.  Please note that not all MS Windows
applications interpret the command line the same way:
\method{list2cmdline} is designed for applications using the same
rules as the MS C runtime.

\var{bufsize}, if given, has the same meaning as the corresponding
argument to the built-in open() function: \constant{0} means unbuffered,
\constant{1} means line buffered, any other positive value means use a
buffer of (approximately) that size.  A negative \var{bufsize} means to
use the system default, which usually means fully buffered.  The default
value for \var{bufsize} is \constant{0} (unbuffered).

The \var{executable} argument specifies the program to execute. It is
very seldom needed: Usually, the program to execute is defined by the
\var{args} argument. If \var{shell=True}, the \var{executable}
argument specifies which shell to use. On \UNIX{}, the default shell
is /bin/sh.  On Windows, the default shell is specified by the COMSPEC
environment variable.

\var{stdin}, \var{stdout} and \var{stderr} specify the executed
programs' standard input, standard output and standard error file
handles, respectively.  Valid values are \code{PIPE}, an existing file
descriptor (a positive integer), an existing file object, and
\code{None}.  \code{PIPE} indicates that a new pipe to the child
should be created.  With \code{None}, no redirection will occur; the
child's file handles will be inherited from the parent.  Additionally,
\var{stderr} can be \code{STDOUT}, which indicates that the stderr
data from the applications should be captured into the same file
handle as for stdout.

If \var{preexec_fn} is set to a callable object, this object will be
called in the child process just before the child is executed.

If \var{close_fds} is true, all file descriptors except \constant{0},
\constant{1} and \constant{2} will be closed before the child process is
executed.

If \var{shell} is \constant{True}, the specified command will be
executed through the shell.

If \var{cwd} is not \code{None}, the current directory will be changed
to cwd before the child is executed.

If \var{env} is not \code{None}, it defines the environment variables
for the new process.

If \var{universal_newlines} is \constant{True}, the file objects stdout
and stderr are opened as text files, but lines may be terminated by
any of \code{'\e n'}, the Unix end-of-line convention, \code{'\e r'},
the Macintosh convention or \code{'\e r\e n'}, the Windows convention.
All of these external representations are seen as \code{'\e n'} by the
Python program.  \note{This feature is only available if Python is built
with universal newline support (the default).  Also, the newlines
attribute of the file objects \member{stdout}, \member{stdin} and
\member{stderr} are not updated by the communicate() method.}

The \var{startupinfo} and \var{creationflags}, if given, will be
passed to the underlying CreateProcess() function.  They can specify
things such as appearance of the main window and priority for the new
process.  (Windows only)
\end{classdesc}

\subsubsection{Convenience Functions}

This module also defines two shortcut functions:

\begin{funcdesc}{call}{*popenargs, **kwargs}
Run command with arguments.  Wait for command to complete, then
return the \member{returncode} attribute.

The arguments are the same as for the Popen constructor.  Example:

\begin{verbatim}
    retcode = call(["ls", "-l"])
\end{verbatim}
\end{funcdesc}

\begin{funcdesc}{check_call}{*popenargs, **kwargs}
Run command with arguments.  Wait for command to complete. If the exit
code was zero then return, otherwise raise CalledProcessError.  The
CalledProcessError object will have the return code in the
\member{errno} attribute.

The arguments are the same as for the Popen constructor.  Example:

\begin{verbatim}
    check_call(["ls", "-l"])
\end{verbatim}
\end{funcdesc}

\subsubsection{Exceptions}

Exceptions raised in the child process, before the new program has
started to execute, will be re-raised in the parent.  Additionally,
the exception object will have one extra attribute called
\member{child_traceback}, which is a string containing traceback
information from the childs point of view.

The most common exception raised is \exception{OSError}.  This occurs,
for example, when trying to execute a non-existent file.  Applications
should prepare for \exception{OSError} exceptions.

A \exception{ValueError} will be raised if \class{Popen} is called
with invalid arguments.

check_call() will raise \exception{CalledProcessError}, which is a
subclass of \exception{OSError}, if the called process returns a
non-zero return code.


\subsubsection{Security}

Unlike some other popen functions, this implementation will never call
/bin/sh implicitly.  This means that all characters, including shell
metacharacters, can safely be passed to child processes.


\subsection{Popen Objects}

Instances of the \class{Popen} class have the following methods:

\begin{methoddesc}{poll}{}
Check if child process has terminated.  Returns returncode
attribute.
\end{methoddesc}

\begin{methoddesc}{wait}{}
Wait for child process to terminate.  Returns returncode attribute.
\end{methoddesc}

\begin{methoddesc}{communicate}{input=None}
Interact with process: Send data to stdin.  Read data from stdout and
stderr, until end-of-file is reached.  Wait for process to terminate.
The optional \var{input} argument should be a string to be sent to the
child process, or \code{None}, if no data should be sent to the child.

communicate() returns a tuple (stdout, stderr).

\note{The data read is buffered in memory, so do not use this method
if the data size is large or unlimited.}
\end{methoddesc}

The following attributes are also available:

\begin{memberdesc}{stdin}
If the \var{stdin} argument is \code{PIPE}, this attribute is a file
object that provides input to the child process.  Otherwise, it is
\code{None}.
\end{memberdesc}

\begin{memberdesc}{stdout}
If the \var{stdout} argument is \code{PIPE}, this attribute is a file
object that provides output from the child process.  Otherwise, it is
\code{None}.
\end{memberdesc}

\begin{memberdesc}{stderr}
If the \var{stderr} argument is \code{PIPE}, this attribute is file
object that provides error output from the child process.  Otherwise,
it is \code{None}.
\end{memberdesc}

\begin{memberdesc}{pid}
The process ID of the child process.
\end{memberdesc}

\begin{memberdesc}{returncode}
The child return code.  A \code{None} value indicates that the process
hasn't terminated yet.  A negative value -N indicates that the child
was terminated by signal N (\UNIX{} only).
\end{memberdesc}


\subsection{Replacing Older Functions with the subprocess Module}

In this section, "a ==> b" means that b can be used as a replacement
for a.

\note{All functions in this section fail (more or less) silently if
the executed program cannot be found; this module raises an
\exception{OSError} exception.}

In the following examples, we assume that the subprocess module is
imported with "from subprocess import *".

\subsubsection{Replacing /bin/sh shell backquote}

\begin{verbatim}
output=`mycmd myarg`
==>
output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
\end{verbatim}

\subsubsection{Replacing shell pipe line}

\begin{verbatim}
output=`dmesg | grep hda`
==>
p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
output = p2.communicate()[0]
\end{verbatim}

\subsubsection{Replacing os.system()}

\begin{verbatim}
sts = os.system("mycmd" + " myarg")
==>
p = Popen("mycmd" + " myarg", shell=True)
sts = os.waitpid(p.pid, 0)
\end{verbatim}

Notes:

\begin{itemize}
\item Calling the program through the shell is usually not required.
\item It's easier to look at the \member{returncode} attribute than
      the exit status.
\end{itemize}

A more realistic example would look like this:

\begin{verbatim}
try:
    retcode = call("mycmd" + " myarg", shell=True)
    if retcode < 0:
        print >>sys.stderr, "Child was terminated by signal", -retcode
    else:
        print >>sys.stderr, "Child returned", retcode
except OSError, e:
    print >>sys.stderr, "Execution failed:", e
\end{verbatim}

\subsubsection{Replacing os.spawn*}

P_NOWAIT example:

\begin{verbatim}
pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
==>
pid = Popen(["/bin/mycmd", "myarg"]).pid
\end{verbatim}

P_WAIT example:

\begin{verbatim}
retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
==>
retcode = call(["/bin/mycmd", "myarg"])
\end{verbatim}

Vector example:

\begin{verbatim}
os.spawnvp(os.P_NOWAIT, path, args)
==>
Popen([path] + args[1:])
\end{verbatim}

Environment example:

\begin{verbatim}
os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
==>
Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
\end{verbatim}

\subsubsection{Replacing os.popen*}

\begin{verbatim}
pipe = os.popen(cmd, mode='r', bufsize)
==>
pipe = Popen(cmd, shell=True, bufsize=bufsize, stdout=PIPE).stdout
\end{verbatim}

\begin{verbatim}
pipe = os.popen(cmd, mode='w', bufsize)
==>
pipe = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE).stdin
\end{verbatim}

\begin{verbatim}
(child_stdin, child_stdout) = os.popen2(cmd, mode, bufsize)
==>
p = Popen(cmd, shell=True, bufsize=bufsize,
          stdin=PIPE, stdout=PIPE, close_fds=True)
(child_stdin, child_stdout) = (p.stdin, p.stdout)
\end{verbatim}

\begin{verbatim}
(child_stdin,
 child_stdout,
 child_stderr) = os.popen3(cmd, mode, bufsize)
==>
p = Popen(cmd, shell=True, bufsize=bufsize,
          stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
(child_stdin,
 child_stdout,
 child_stderr) = (p.stdin, p.stdout, p.stderr)
\end{verbatim}

\begin{verbatim}
(child_stdin, child_stdout_and_stderr) = os.popen4(cmd, mode, bufsize)
==>
p = Popen(cmd, shell=True, bufsize=bufsize,
          stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
(child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout)
\end{verbatim}

\subsubsection{Replacing popen2.*}

\note{If the cmd argument to popen2 functions is a string, the command
is executed through /bin/sh.  If it is a list, the command is directly
executed.}

\begin{verbatim}
(child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
==>
p = Popen(["somestring"], shell=True, bufsize=bufsize,
          stdin=PIPE, stdout=PIPE, close_fds=True)
(child_stdout, child_stdin) = (p.stdout, p.stdin)
\end{verbatim}

\begin{verbatim}
(child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, mode)
==>
p = Popen(["mycmd", "myarg"], bufsize=bufsize,
          stdin=PIPE, stdout=PIPE, close_fds=True)
(child_stdout, child_stdin) = (p.stdout, p.stdin)
\end{verbatim}

The popen2.Popen3 and popen3.Popen4 basically works as subprocess.Popen,
except that:

\begin{itemize}
\item subprocess.Popen raises an exception if the execution fails

\item the \var{capturestderr} argument is replaced with the \var{stderr}
      argument.

\item stdin=PIPE and stdout=PIPE must be specified.

\item popen2 closes all file descriptors by default, but you have to
      specify close_fds=True with subprocess.Popen.
\end{itemize}
