mirror of
https://github.com/python/cpython.git
synced 2025-11-26 13:22:51 +00:00
Document that on Unix, the 'cmd' argument to the os.popen2/3/4 and
popen2.popen2/3/4 functions can be a sequence. All texts are a variation on the
following:
On \UNIX, \var{cmd} may be a sequence, in which case arguments will be passed
directly to the program without shell intervention (as with
\function{os.spawnv()}). If \var{cmd} is a string it will be passed to the shell
(as with \function{os.system()}).
This commit is contained in:
parent
c054a8b1a9
commit
9fc9789a0d
4 changed files with 75 additions and 27 deletions
|
|
@ -361,6 +361,11 @@ specified, it specifies the buffer size for the I/O pipes.
|
||||||
objects should be opened in binary or text mode. The default value
|
objects should be opened in binary or text mode. The default value
|
||||||
for \var{mode} is \code{'t'}.
|
for \var{mode} is \code{'t'}.
|
||||||
|
|
||||||
|
Also, for each of these variants, on \UNIX, \var{cmd} may be a sequence, in
|
||||||
|
which case arguments will be passed directly to the program without shell
|
||||||
|
intervention (as with \function{os.spawnv()}). If \var{cmd} is a string it will
|
||||||
|
be passed to the shell (as with \function{os.system()}).
|
||||||
|
|
||||||
These methods do not make it possible to retrieve the return code from
|
These methods do not make it possible to retrieve the return code from
|
||||||
the child processes. The only way to control the input and output
|
the child processes. The only way to control the input and output
|
||||||
streams and also retrieve the return codes is to use the
|
streams and also retrieve the return codes is to use the
|
||||||
|
|
@ -389,15 +394,14 @@ Availability: \UNIX, Windows.
|
||||||
\begin{funcdesc}{popen4}{cmd\optional{, mode\optional{, bufsize}}}
|
\begin{funcdesc}{popen4}{cmd\optional{, mode\optional{, bufsize}}}
|
||||||
Executes \var{cmd} as a sub-process. Returns the file objects
|
Executes \var{cmd} as a sub-process. Returns the file objects
|
||||||
\code{(\var{child_stdin}, \var{child_stdout_and_stderr})}.
|
\code{(\var{child_stdin}, \var{child_stdout_and_stderr})}.
|
||||||
|
Availability: \UNIX, Windows.
|
||||||
|
\versionadded{2.0}
|
||||||
|
\end{funcdesc}
|
||||||
|
|
||||||
(Note that \code{\var{child_stdin}, \var{child_stdout}, and
|
(Note that \code{\var{child_stdin}, \var{child_stdout}, and
|
||||||
\var{child_stderr}} are named from the point of view of the child
|
\var{child_stderr}} are named from the point of view of the child
|
||||||
process, i.e. \var{child_stdin} is the child's standard input.)
|
process, i.e. \var{child_stdin} is the child's standard input.)
|
||||||
|
|
||||||
Availability: \UNIX, Windows.
|
|
||||||
\versionadded{2.0}
|
|
||||||
\end{funcdesc}
|
|
||||||
|
|
||||||
This functionality is also available in the \refmodule{popen2} module
|
This functionality is also available in the \refmodule{popen2} module
|
||||||
using functions of the same names, but the return values of those
|
using functions of the same names, but the return values of those
|
||||||
functions have a different order.
|
functions have a different order.
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,11 @@ this is needed to determine whether the file objects should be opened
|
||||||
in binary or text mode. The default value for \var{mode} is
|
in binary or text mode. The default value for \var{mode} is
|
||||||
\code{'t'}.
|
\code{'t'}.
|
||||||
|
|
||||||
|
On \UNIX, \var{cmd} may be a sequence, in which case arguments will be passed
|
||||||
|
directly to the program without shell intervention (as with
|
||||||
|
\function{os.spawnv()}). If \var{cmd} is a string it will be passed to the
|
||||||
|
shell (as with \function{os.system()}).
|
||||||
|
|
||||||
The only way to retrieve the return codes for the child processes is
|
The only way to retrieve the return codes for the child processes is
|
||||||
by using the \method{poll()} or \method{wait()} methods on the
|
by using the \method{poll()} or \method{wait()} methods on the
|
||||||
\class{Popen3} and \class{Popen4} classes; these are only available on
|
\class{Popen3} and \class{Popen4} classes; these are only available on
|
||||||
|
|
@ -75,7 +80,6 @@ using \function{popen4()}.
|
||||||
\versionadded{2.0}
|
\versionadded{2.0}
|
||||||
\end{classdesc}
|
\end{classdesc}
|
||||||
|
|
||||||
|
|
||||||
\subsection{Popen3 and Popen4 Objects \label{popen3-objects}}
|
\subsection{Popen3 and Popen4 Objects \label{popen3-objects}}
|
||||||
|
|
||||||
Instances of the \class{Popen3} and \class{Popen4} classes have the
|
Instances of the \class{Popen3} and \class{Popen4} classes have the
|
||||||
|
|
|
||||||
18
Lib/os.py
18
Lib/os.py
|
|
@ -611,6 +611,12 @@ otherwise return -SIG, where SIG is the signal that killed it. """
|
||||||
if _exists("fork"):
|
if _exists("fork"):
|
||||||
if not _exists("popen2"):
|
if not _exists("popen2"):
|
||||||
def popen2(cmd, mode="t", bufsize=-1):
|
def popen2(cmd, mode="t", bufsize=-1):
|
||||||
|
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd'
|
||||||
|
may be a sequence, in which case arguments will be passed directly to
|
||||||
|
the program without shell intervention (as with os.spawnv()). If 'cmd'
|
||||||
|
is a string it will be passed to the shell (as with os.system()). If
|
||||||
|
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||||
|
file objects (child_stdin, child_stdout) are returned."""
|
||||||
import popen2
|
import popen2
|
||||||
stdout, stdin = popen2.popen2(cmd, bufsize)
|
stdout, stdin = popen2.popen2(cmd, bufsize)
|
||||||
return stdin, stdout
|
return stdin, stdout
|
||||||
|
|
@ -618,6 +624,12 @@ if _exists("fork"):
|
||||||
|
|
||||||
if not _exists("popen3"):
|
if not _exists("popen3"):
|
||||||
def popen3(cmd, mode="t", bufsize=-1):
|
def popen3(cmd, mode="t", bufsize=-1):
|
||||||
|
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd'
|
||||||
|
may be a sequence, in which case arguments will be passed directly to
|
||||||
|
the program without shell intervention (as with os.spawnv()). If 'cmd'
|
||||||
|
is a string it will be passed to the shell (as with os.system()). If
|
||||||
|
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||||
|
file objects (child_stdin, child_stdout, child_stderr) are returned."""
|
||||||
import popen2
|
import popen2
|
||||||
stdout, stdin, stderr = popen2.popen3(cmd, bufsize)
|
stdout, stdin, stderr = popen2.popen3(cmd, bufsize)
|
||||||
return stdin, stdout, stderr
|
return stdin, stdout, stderr
|
||||||
|
|
@ -625,6 +637,12 @@ if _exists("fork"):
|
||||||
|
|
||||||
if not _exists("popen4"):
|
if not _exists("popen4"):
|
||||||
def popen4(cmd, mode="t", bufsize=-1):
|
def popen4(cmd, mode="t", bufsize=-1):
|
||||||
|
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd'
|
||||||
|
may be a sequence, in which case arguments will be passed directly to
|
||||||
|
the program without shell intervention (as with os.spawnv()). If 'cmd'
|
||||||
|
is a string it will be passed to the shell (as with os.system()). If
|
||||||
|
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||||
|
file objects (child_stdin, child_stdout_stderr) are returned."""
|
||||||
import popen2
|
import popen2
|
||||||
stdout, stdin = popen2.popen4(cmd, bufsize)
|
stdout, stdin = popen2.popen4(cmd, bufsize)
|
||||||
return stdin, stdout
|
return stdin, stdout
|
||||||
|
|
|
||||||
|
|
@ -30,10 +30,14 @@ class Popen3:
|
||||||
|
|
||||||
def __init__(self, cmd, capturestderr=False, bufsize=-1):
|
def __init__(self, cmd, capturestderr=False, bufsize=-1):
|
||||||
"""The parameter 'cmd' is the shell command to execute in a
|
"""The parameter 'cmd' is the shell command to execute in a
|
||||||
sub-process. The 'capturestderr' flag, if true, specifies that
|
sub-process. On UNIX, 'cmd' may be a sequence, in which case arguments
|
||||||
the object should capture standard error output of the child process.
|
will be passed directly to the program without shell intervention (as
|
||||||
The default is false. If the 'bufsize' parameter is specified, it
|
with os.spawnv()). If 'cmd' is a string it will be passed to the shell
|
||||||
specifies the size of the I/O buffers to/from the child process."""
|
(as with os.system()). The 'capturestderr' flag, if true, specifies
|
||||||
|
that the object should capture standard error output of the child
|
||||||
|
process. The default is false. If the 'bufsize' parameter is
|
||||||
|
specified, it specifies the size of the I/O buffers to/from the child
|
||||||
|
process."""
|
||||||
_cleanup()
|
_cleanup()
|
||||||
p2cread, p2cwrite = os.pipe()
|
p2cread, p2cwrite = os.pipe()
|
||||||
c2pread, c2pwrite = os.pipe()
|
c2pread, c2pwrite = os.pipe()
|
||||||
|
|
@ -120,44 +124,62 @@ if sys.platform[:3] == "win" or sys.platform == "os2emx":
|
||||||
del Popen3, Popen4
|
del Popen3, Popen4
|
||||||
|
|
||||||
def popen2(cmd, bufsize=-1, mode='t'):
|
def popen2(cmd, bufsize=-1, mode='t'):
|
||||||
"""Execute the shell command 'cmd' in a sub-process. If 'bufsize' is
|
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may
|
||||||
specified, it sets the buffer size for the I/O pipes. The file objects
|
be a sequence, in which case arguments will be passed directly to the
|
||||||
(child_stdout, child_stdin) are returned."""
|
program without shell intervention (as with os.spawnv()). If 'cmd' is a
|
||||||
|
string it will be passed to the shell (as with os.system()). If
|
||||||
|
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||||
|
file objects (child_stdout, child_stdin) are returned."""
|
||||||
w, r = os.popen2(cmd, mode, bufsize)
|
w, r = os.popen2(cmd, mode, bufsize)
|
||||||
return r, w
|
return r, w
|
||||||
|
|
||||||
def popen3(cmd, bufsize=-1, mode='t'):
|
def popen3(cmd, bufsize=-1, mode='t'):
|
||||||
"""Execute the shell command 'cmd' in a sub-process. If 'bufsize' is
|
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may
|
||||||
specified, it sets the buffer size for the I/O pipes. The file objects
|
be a sequence, in which case arguments will be passed directly to the
|
||||||
(child_stdout, child_stdin, child_stderr) are returned."""
|
program without shell intervention (as with os.spawnv()). If 'cmd' is a
|
||||||
|
string it will be passed to the shell (as with os.system()). If
|
||||||
|
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||||
|
file objects (child_stdout, child_stdin, child_stderr) are returned."""
|
||||||
w, r, e = os.popen3(cmd, mode, bufsize)
|
w, r, e = os.popen3(cmd, mode, bufsize)
|
||||||
return r, w, e
|
return r, w, e
|
||||||
|
|
||||||
def popen4(cmd, bufsize=-1, mode='t'):
|
def popen4(cmd, bufsize=-1, mode='t'):
|
||||||
"""Execute the shell command 'cmd' in a sub-process. If 'bufsize' is
|
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may
|
||||||
specified, it sets the buffer size for the I/O pipes. The file objects
|
be a sequence, in which case arguments will be passed directly to the
|
||||||
(child_stdout_stderr, child_stdin) are returned."""
|
program without shell intervention (as with os.spawnv()). If 'cmd' is a
|
||||||
|
string it will be passed to the shell (as with os.system()). If
|
||||||
|
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||||
|
file objects (child_stdout_stderr, child_stdin) are returned."""
|
||||||
w, r = os.popen4(cmd, mode, bufsize)
|
w, r = os.popen4(cmd, mode, bufsize)
|
||||||
return r, w
|
return r, w
|
||||||
else:
|
else:
|
||||||
def popen2(cmd, bufsize=-1, mode='t'):
|
def popen2(cmd, bufsize=-1, mode='t'):
|
||||||
"""Execute the shell command 'cmd' in a sub-process. If 'bufsize' is
|
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may
|
||||||
specified, it sets the buffer size for the I/O pipes. The file objects
|
be a sequence, in which case arguments will be passed directly to the
|
||||||
(child_stdout, child_stdin) are returned."""
|
program without shell intervention (as with os.spawnv()). If 'cmd' is a
|
||||||
|
string it will be passed to the shell (as with os.system()). If
|
||||||
|
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||||
|
file objects (child_stdout, child_stdin) are returned."""
|
||||||
inst = Popen3(cmd, False, bufsize)
|
inst = Popen3(cmd, False, bufsize)
|
||||||
return inst.fromchild, inst.tochild
|
return inst.fromchild, inst.tochild
|
||||||
|
|
||||||
def popen3(cmd, bufsize=-1, mode='t'):
|
def popen3(cmd, bufsize=-1, mode='t'):
|
||||||
"""Execute the shell command 'cmd' in a sub-process. If 'bufsize' is
|
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may
|
||||||
specified, it sets the buffer size for the I/O pipes. The file objects
|
be a sequence, in which case arguments will be passed directly to the
|
||||||
(child_stdout, child_stdin, child_stderr) are returned."""
|
program without shell intervention (as with os.spawnv()). If 'cmd' is a
|
||||||
|
string it will be passed to the shell (as with os.system()). If
|
||||||
|
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||||
|
file objects (child_stdout, child_stdin, child_stderr) are returned."""
|
||||||
inst = Popen3(cmd, True, bufsize)
|
inst = Popen3(cmd, True, bufsize)
|
||||||
return inst.fromchild, inst.tochild, inst.childerr
|
return inst.fromchild, inst.tochild, inst.childerr
|
||||||
|
|
||||||
def popen4(cmd, bufsize=-1, mode='t'):
|
def popen4(cmd, bufsize=-1, mode='t'):
|
||||||
"""Execute the shell command 'cmd' in a sub-process. If 'bufsize' is
|
"""Execute the shell command 'cmd' in a sub-process. On UNIX, 'cmd' may
|
||||||
specified, it sets the buffer size for the I/O pipes. The file objects
|
be a sequence, in which case arguments will be passed directly to the
|
||||||
(child_stdout_stderr, child_stdin) are returned."""
|
program without shell intervention (as with os.spawnv()). If 'cmd' is a
|
||||||
|
string it will be passed to the shell (as with os.system()). If
|
||||||
|
'bufsize' is specified, it sets the buffer size for the I/O pipes. The
|
||||||
|
file objects (child_stdout_stderr, child_stdin) are returned."""
|
||||||
inst = Popen4(cmd, bufsize)
|
inst = Popen4(cmd, bufsize)
|
||||||
return inst.fromchild, inst.tochild
|
return inst.fromchild, inst.tochild
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue