blob: 38f0f185e8f059273a3ab6fa65be92bcdc56375a [file] [log] [blame]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001# subprocess - Subprocesses with accessible I/O streams
2#
Tim Peterse718f612004-10-12 21:51:32 +00003# For more information about this module, see PEP 324.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00004#
Peter Astrand3a708df2005-09-23 17:37:29 +00005# Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se>
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00006#
Peter Astrand69bf13f2005-02-14 08:56:32 +00007# Licensed to PSF under a Contributor Agreement.
Peter Astrand3a708df2005-09-23 17:37:29 +00008# See http://www.python.org/2.4/license for licensing details.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00009
Raymond Hettinger837dd932004-10-17 16:36:53 +000010r"""subprocess - Subprocesses with accessible I/O streams
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000011
Fredrik Lundh15aaacc2004-10-17 14:47:05 +000012This module allows you to spawn processes, connect to their
13input/output/error pipes, and obtain their return codes. This module
Benjamin Peterson5eea8a72014-03-12 21:41:35 -050014intends to replace several older modules and functions:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000015
16os.system
17os.spawn*
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000018
19Information about how the subprocess module can be used to replace these
20modules and functions can be found below.
21
22
23
24Using the subprocess module
25===========================
26This module defines one class called Popen:
27
Gregory P. Smitha1ed5392013-03-23 11:44:25 -070028class Popen(args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000029 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +000030 preexec_fn=None, close_fds=True, shell=False,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000031 cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +000032 startupinfo=None, creationflags=0,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +000033 restore_signals=True, start_new_session=False, pass_fds=()):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000034
35
36Arguments are:
37
38args should be a string, or a sequence of program arguments. The
39program to execute is normally the first item in the args sequence or
40string, but can be explicitly set by using the executable argument.
41
Gregory P. Smithf5604852010-12-13 06:45:02 +000042On POSIX, with shell=False (default): In this case, the Popen class
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000043uses os.execvp() to execute the child program. args should normally
44be a sequence. A string will be treated as a sequence with the string
45as the only item (the program to execute).
46
Gregory P. Smithf5604852010-12-13 06:45:02 +000047On POSIX, with shell=True: If args is a string, it specifies the
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000048command string to execute through the shell. If args is a sequence,
49the first item specifies the command string, and any additional items
50will be treated as additional shell arguments.
51
52On Windows: the Popen class uses CreateProcess() to execute the child
53program, which operates on strings. If args is a sequence, it will be
54converted to a string using the list2cmdline method. Please note that
55not all MS Windows applications interpret the command line the same
56way: The list2cmdline is designed for applications using the same
57rules as the MS C runtime.
58
Gregory P. Smitha1ed5392013-03-23 11:44:25 -070059bufsize will be supplied as the corresponding argument to the io.open()
60function when creating the stdin/stdout/stderr pipe file objects:
610 means unbuffered (read & write are one system call and can return short),
621 means line buffered, any other positive value means use a buffer of
63approximately that size. A negative bufsize, the default, means the system
64default of io.DEFAULT_BUFFER_SIZE will be used.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000065
66stdin, stdout and stderr specify the executed programs' standard
67input, standard output and standard error file handles, respectively.
68Valid values are PIPE, an existing file descriptor (a positive
69integer), an existing file object, and None. PIPE indicates that a
70new pipe to the child should be created. With None, no redirection
71will occur; the child's file handles will be inherited from the
72parent. Additionally, stderr can be STDOUT, which indicates that the
73stderr data from the applications should be captured into the same
74file handle as for stdout.
75
Gregory P. Smithf5604852010-12-13 06:45:02 +000076On POSIX, if preexec_fn is set to a callable object, this object will be
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +000077called in the child process just before the child is executed. The use
78of preexec_fn is not thread safe, using it in the presence of threads
79could lead to a deadlock in the child process before the new executable
80is executed.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000081
82If close_fds is true, all file descriptors except 0, 1 and 2 will be
Gregory P. Smithf5604852010-12-13 06:45:02 +000083closed before the child process is executed. The default for close_fds
Gregory P. Smith8edd99d2010-12-14 13:43:30 +000084varies by platform: Always true on POSIX. True when stdin/stdout/stderr
85are None on Windows, false otherwise.
86
87pass_fds is an optional sequence of file descriptors to keep open between the
88parent and child. Providing any pass_fds implicitly sets close_fds to true.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +000089
90if shell is true, the specified command will be executed through the
91shell.
92
93If cwd is not None, the current directory will be changed to cwd
94before the child is executed.
95
Gregory P. Smithf5604852010-12-13 06:45:02 +000096On POSIX, if restore_signals is True all signals that Python sets to
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +000097SIG_IGN are restored to SIG_DFL in the child process before the exec.
98Currently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals. This
99parameter does nothing on Windows.
100
Gregory P. Smithf5604852010-12-13 06:45:02 +0000101On POSIX, if start_new_session is True, the setsid() system call will be made
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000102in the child process prior to executing the command.
103
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000104If env is not None, it defines the environment variables for the new
105process.
106
Ronald Oussoren385521c2013-07-07 09:26:45 +0200107If universal_newlines is false, the file objects stdin, stdout and stderr
108are opened as binary files, and no line ending conversion is done.
109
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000110If universal_newlines is true, the file objects stdout and stderr are
111opened as a text files, but lines may be terminated by any of '\n',
Gregory P. Smithf5604852010-12-13 06:45:02 +0000112the Unix end-of-line convention, '\r', the old Macintosh convention or
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000113'\r\n', the Windows convention. All of these external representations
Gregory P. Smith1f8a40b2013-03-20 18:32:03 -0700114are seen as '\n' by the Python program. Also, the newlines attribute
115of the file objects stdout, stdin and stderr are not updated by the
116communicate() method.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000117
118The startupinfo and creationflags, if given, will be passed to the
119underlying CreateProcess() function. They can specify things such as
120appearance of the main window and priority for the new process.
121(Windows only)
122
123
Georg Brandlf9734072008-12-07 15:30:06 +0000124This module also defines some shortcut functions:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000125
Peter Astrand5f5e1412004-12-05 20:15:36 +0000126call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000127 Run command with arguments. Wait for command to complete, then
128 return the returncode attribute.
129
130 The arguments are the same as for the Popen constructor. Example:
131
Florent Xicluna4886d242010-03-08 13:27:26 +0000132 >>> retcode = subprocess.call(["ls", "-l"])
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000133
Peter Astrand454f7672005-01-01 09:36:35 +0000134check_call(*popenargs, **kwargs):
135 Run command with arguments. Wait for command to complete. If the
136 exit code was zero then return, otherwise raise
137 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000138 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000139
140 The arguments are the same as for the Popen constructor. Example:
141
Florent Xicluna4886d242010-03-08 13:27:26 +0000142 >>> subprocess.check_call(["ls", "-l"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000143 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000144
Brett Cannona23810f2008-05-26 19:04:21 +0000145getstatusoutput(cmd):
146 Return (status, output) of executing cmd in a shell.
147
Tim Golden60798142013-11-05 12:57:25 +0000148 Execute the string 'cmd' in a shell with 'check_output' and
149 return a 2-tuple (status, output). Universal newlines mode is used,
150 meaning that the result with be decoded to a string.
151
152 A trailing newline is stripped from the output.
153 The exit status for the command can be interpreted
154 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000155
Brett Cannona23810f2008-05-26 19:04:21 +0000156 >>> subprocess.getstatusoutput('ls /bin/ls')
157 (0, '/bin/ls')
158 >>> subprocess.getstatusoutput('cat /bin/junk')
159 (256, 'cat: /bin/junk: No such file or directory')
160 >>> subprocess.getstatusoutput('/bin/junk')
161 (256, 'sh: /bin/junk: not found')
162
163getoutput(cmd):
164 Return output (stdout or stderr) of executing cmd in a shell.
165
166 Like getstatusoutput(), except the exit status is ignored and the return
167 value is a string containing the command's output. Example:
168
Brett Cannona23810f2008-05-26 19:04:21 +0000169 >>> subprocess.getoutput('ls /bin/ls')
170 '/bin/ls'
171
Georg Brandlf9734072008-12-07 15:30:06 +0000172check_output(*popenargs, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700173 Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000174
Georg Brandl2708f3a2009-12-20 14:38:23 +0000175 If the exit code was non-zero it raises a CalledProcessError. The
176 CalledProcessError object will have the return code in the returncode
177 attribute and output in the output attribute.
Georg Brandlf9734072008-12-07 15:30:06 +0000178
Georg Brandl2708f3a2009-12-20 14:38:23 +0000179 The arguments are the same as for the Popen constructor. Example:
Georg Brandlf9734072008-12-07 15:30:06 +0000180
Georg Brandl2708f3a2009-12-20 14:38:23 +0000181 >>> output = subprocess.check_output(["ls", "-l", "/dev/null"])
Georg Brandlf9734072008-12-07 15:30:06 +0000182
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300183 There is an additional optional argument, "input", allowing you to
184 pass a string to the subprocess's stdin. If you use this argument
185 you may not also use the Popen constructor's "stdin" argument.
Brett Cannona23810f2008-05-26 19:04:21 +0000186
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000187Exceptions
188----------
189Exceptions raised in the child process, before the new program has
190started to execute, will be re-raised in the parent. Additionally,
191the exception object will have one extra attribute called
192'child_traceback', which is a string containing traceback information
Ezio Melotti30b9d5d2013-08-17 15:50:46 +0300193from the child's point of view.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000194
195The most common exception raised is OSError. This occurs, for
196example, when trying to execute a non-existent file. Applications
197should prepare for OSErrors.
198
199A ValueError will be raised if Popen is called with invalid arguments.
200
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400201Exceptions defined within this module inherit from SubprocessError.
202check_call() and check_output() will raise CalledProcessError if the
Gregory P. Smithb4039aa2011-03-14 14:16:20 -0400203called process returns a non-zero return code. TimeoutExpired
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400204be raised if a timeout was specified and expired.
Peter Astrand454f7672005-01-01 09:36:35 +0000205
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000206
207Security
208--------
209Unlike some other popen functions, this implementation will never call
210/bin/sh implicitly. This means that all characters, including shell
211metacharacters, can safely be passed to child processes.
212
213
214Popen objects
215=============
216Instances of the Popen class have the following methods:
217
218poll()
219 Check if child process has terminated. Returns returncode
220 attribute.
221
222wait()
223 Wait for child process to terminate. Returns returncode attribute.
224
225communicate(input=None)
226 Interact with process: Send data to stdin. Read data from stdout
227 and stderr, until end-of-file is reached. Wait for process to
Thomas Wouters902d6eb2007-01-09 23:18:33 +0000228 terminate. The optional input argument should be a string to be
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000229 sent to the child process, or None, if no data should be sent to
230 the child.
Tim Peterse718f612004-10-12 21:51:32 +0000231
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000232 communicate() returns a tuple (stdout, stderr).
233
234 Note: The data read is buffered in memory, so do not use this
235 method if the data size is large or unlimited.
236
237The following attributes are also available:
238
239stdin
240 If the stdin argument is PIPE, this attribute is a file object
241 that provides input to the child process. Otherwise, it is None.
242
243stdout
244 If the stdout argument is PIPE, this attribute is a file object
245 that provides output from the child process. Otherwise, it is
246 None.
247
248stderr
249 If the stderr argument is PIPE, this attribute is file object that
250 provides error output from the child process. Otherwise, it is
251 None.
252
253pid
254 The process ID of the child process.
255
256returncode
257 The child return code. A None value indicates that the process
258 hasn't terminated yet. A negative value -N indicates that the
Gregory P. Smithf5604852010-12-13 06:45:02 +0000259 child was terminated by signal N (POSIX only).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000260
261
262Replacing older functions with the subprocess module
263====================================================
264In this section, "a ==> b" means that b can be used as a replacement
265for a.
266
267Note: All functions in this section fail (more or less) silently if
268the executed program cannot be found; this module raises an OSError
269exception.
270
271In the following examples, we assume that the subprocess module is
272imported with "from subprocess import *".
273
274
275Replacing /bin/sh shell backquote
276---------------------------------
277output=`mycmd myarg`
278==>
279output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
280
281
282Replacing shell pipe line
283-------------------------
284output=`dmesg | grep hda`
285==>
286p1 = Popen(["dmesg"], stdout=PIPE)
Peter Astrand6fdf3cb2004-11-30 18:06:42 +0000287p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000288output = p2.communicate()[0]
289
290
291Replacing os.system()
292---------------------
293sts = os.system("mycmd" + " myarg")
294==>
295p = Popen("mycmd" + " myarg", shell=True)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000296pid, sts = os.waitpid(p.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000297
298Note:
299
300* Calling the program through the shell is usually not required.
301
302* It's easier to look at the returncode attribute than the
303 exitstatus.
304
305A more real-world example would look like this:
306
307try:
308 retcode = call("mycmd" + " myarg", shell=True)
309 if retcode < 0:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000310 print("Child was terminated by signal", -retcode, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000311 else:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000312 print("Child returned", retcode, file=sys.stderr)
313except OSError as e:
314 print("Execution failed:", e, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000315
316
317Replacing os.spawn*
318-------------------
Tim Peterse718f612004-10-12 21:51:32 +0000319P_NOWAIT example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000320
321pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
322==>
323pid = Popen(["/bin/mycmd", "myarg"]).pid
324
325
326P_WAIT example:
327
328retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
329==>
330retcode = call(["/bin/mycmd", "myarg"])
331
332
Tim Peterse718f612004-10-12 21:51:32 +0000333Vector example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000334
335os.spawnvp(os.P_NOWAIT, path, args)
336==>
337Popen([path] + args[1:])
338
339
Tim Peterse718f612004-10-12 21:51:32 +0000340Environment example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000341
342os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
343==>
344Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000345"""
346
347import sys
348mswindows = (sys.platform == "win32")
349
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000350import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000351import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400352import time
Christian Heimesa342c012008-04-20 21:01:16 +0000353import signal
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000354import builtins
Gregory P. Smithd23047b2010-12-04 09:10:44 +0000355import warnings
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200356import errno
Victor Stinner949d8c92012-05-30 13:30:32 +0200357try:
358 from time import monotonic as _time
Brett Cannoncd171c82013-07-04 17:43:24 -0400359except ImportError:
Victor Stinner949d8c92012-05-30 13:30:32 +0200360 from time import time as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000361
Peter Astrand454f7672005-01-01 09:36:35 +0000362# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400363class SubprocessError(Exception): pass
364
365
366class CalledProcessError(SubprocessError):
Georg Brandlf9734072008-12-07 15:30:06 +0000367 """This exception is raised when a process run by check_call() or
368 check_output() returns a non-zero exit status.
369 The exit status will be stored in the returncode attribute;
370 check_output() will also store the output in the output attribute.
371 """
372 def __init__(self, returncode, cmd, output=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000373 self.returncode = returncode
374 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000375 self.output = output
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000376 def __str__(self):
377 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
378
Peter Astrand454f7672005-01-01 09:36:35 +0000379
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400380class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400381 """This exception is raised when the timeout expires while waiting for a
382 child process.
383 """
Reid Kleckner2b228f02011-03-16 16:57:54 -0400384 def __init__(self, cmd, timeout, output=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400385 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400386 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400387 self.output = output
388
389 def __str__(self):
390 return ("Command '%s' timed out after %s seconds" %
391 (self.cmd, self.timeout))
392
393
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000394if mswindows:
395 import threading
396 import msvcrt
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200397 import _winapi
Brian Curtin1ce6b582010-04-24 16:19:22 +0000398 class STARTUPINFO:
399 dwFlags = 0
400 hStdInput = None
401 hStdOutput = None
402 hStdError = None
403 wShowWindow = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000404else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700405 import _posixsubprocess
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100406 import select
407 import selectors
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000408
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000409 # When select or poll has indicated that the file is writable,
410 # we can write up to _PIPE_BUF bytes without risk of blocking.
411 # POSIX defines PIPE_BUF as >= 512.
412 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
413
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100414 # poll/select have the advantage of not requiring any extra file
415 # descriptor, contrarily to epoll/kqueue (also, they require a single
416 # syscall).
417 if hasattr(selectors, 'PollSelector'):
418 _PopenSelector = selectors.PollSelector
419 else:
420 _PopenSelector = selectors.SelectSelector
421
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000422
Brett Cannona23810f2008-05-26 19:04:21 +0000423__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200424 "getoutput", "check_output", "CalledProcessError", "DEVNULL"]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000425
Brian Curtin1ce6b582010-04-24 16:19:22 +0000426if mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200427 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
428 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
429 STD_ERROR_HANDLE, SW_HIDE,
430 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500431
Brian Curtin08fd8d92011-04-29 16:11:30 -0500432 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500433 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
434 "STD_ERROR_HANDLE", "SW_HIDE",
435 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200436
437 class Handle(int):
438 closed = False
439
440 def Close(self, CloseHandle=_winapi.CloseHandle):
441 if not self.closed:
442 self.closed = True
443 CloseHandle(self)
444
445 def Detach(self):
446 if not self.closed:
447 self.closed = True
448 return int(self)
449 raise ValueError("already closed")
450
451 def __repr__(self):
452 return "Handle(%d)" % int(self)
453
454 __del__ = Close
455 __str__ = __repr__
456
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000457try:
458 MAXFD = os.sysconf("SC_OPEN_MAX")
459except:
460 MAXFD = 256
461
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200462# This lists holds Popen instances for which the underlying process had not
463# exited at the time its __del__ method got called: those processes are wait()ed
464# for synchronously from _cleanup() when a new Popen object is created, to avoid
465# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000466_active = []
467
468def _cleanup():
469 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000470 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200471 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000472 try:
473 _active.remove(inst)
474 except ValueError:
475 # This can happen if two threads create a new Popen instance.
476 # It's harmless that it was already removed, so ignore.
477 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000478
479PIPE = -1
480STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200481DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000482
483
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000484def _eintr_retry_call(func, *args):
485 while True:
486 try:
487 return func(*args)
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200488 except InterruptedError:
489 continue
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000490
491
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200492# XXX This function is only used by multiprocessing and the test suite,
493# but it's here so that it can be imported when Python is compiled without
494# threads.
495
496def _args_from_interpreter_flags():
497 """Return a list of command-line arguments reproducing the current
498 settings in sys.flags and sys.warnoptions."""
499 flag_opt_map = {
500 'debug': 'd',
501 # 'inspect': 'i',
502 # 'interactive': 'i',
503 'optimize': 'O',
504 'dont_write_bytecode': 'B',
505 'no_user_site': 's',
506 'no_site': 'S',
507 'ignore_environment': 'E',
508 'verbose': 'v',
509 'bytes_warning': 'b',
510 'quiet': 'q',
511 'hash_randomization': 'R',
512 }
513 args = []
514 for flag, opt in flag_opt_map.items():
515 v = getattr(sys.flags, flag)
516 if v > 0:
Nick Coghlanac1a2482013-10-18 22:39:50 +1000517 if flag == 'hash_randomization':
518 v = 1 # Handle specification of an exact seed
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200519 args.append('-' + opt * v)
520 for opt in sys.warnoptions:
521 args.append('-W' + opt)
522 return args
523
524
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400525def call(*popenargs, timeout=None, **kwargs):
526 """Run command with arguments. Wait for command to complete or
527 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000528
529 The arguments are the same as for the Popen constructor. Example:
530
531 retcode = call(["ls", "-l"])
532 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200533 with Popen(*popenargs, **kwargs) as p:
534 try:
535 return p.wait(timeout=timeout)
536 except:
537 p.kill()
538 p.wait()
539 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000540
541
Peter Astrand454f7672005-01-01 09:36:35 +0000542def check_call(*popenargs, **kwargs):
543 """Run command with arguments. Wait for command to complete. If
544 the exit code was zero then return, otherwise raise
545 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000546 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000547
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400548 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000549
550 check_call(["ls", "-l"])
551 """
552 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000553 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000554 cmd = kwargs.get("args")
555 if cmd is None:
556 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000557 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000558 return 0
559
560
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400561def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700562 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000563
564 If the exit code was non-zero it raises a CalledProcessError. The
565 CalledProcessError object will have the return code in the returncode
566 attribute and output in the output attribute.
567
568 The arguments are the same as for the Popen constructor. Example:
569
570 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000571 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000572
573 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000574 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000575
576 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000577 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000578 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000579 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700580
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300581 There is an additional optional argument, "input", allowing you to
582 pass a string to the subprocess's stdin. If you use this argument
583 you may not also use the Popen constructor's "stdin" argument, as
584 it too will be used internally. Example:
585
586 >>> check_output(["sed", "-e", "s/foo/bar/"],
587 ... input=b"when in the course of fooman events\n")
588 b'when in the course of barman events\n'
589
Gregory P. Smith91110f52013-03-19 23:25:16 -0700590 If universal_newlines=True is passed, the return value will be a
591 string rather than bytes.
Georg Brandlf9734072008-12-07 15:30:06 +0000592 """
593 if 'stdout' in kwargs:
594 raise ValueError('stdout argument not allowed, it will be overridden.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300595 if 'input' in kwargs:
596 if 'stdin' in kwargs:
597 raise ValueError('stdin and input arguments may not both be used.')
598 inputdata = kwargs['input']
599 del kwargs['input']
600 kwargs['stdin'] = PIPE
601 else:
602 inputdata = None
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200603 with Popen(*popenargs, stdout=PIPE, **kwargs) as process:
604 try:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300605 output, unused_err = process.communicate(inputdata, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200606 except TimeoutExpired:
607 process.kill()
608 output, unused_err = process.communicate()
609 raise TimeoutExpired(process.args, timeout, output=output)
610 except:
611 process.kill()
612 process.wait()
613 raise
614 retcode = process.poll()
615 if retcode:
616 raise CalledProcessError(retcode, process.args, output=output)
Georg Brandlf9734072008-12-07 15:30:06 +0000617 return output
Peter Astrand454f7672005-01-01 09:36:35 +0000618
619
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000620def list2cmdline(seq):
621 """
622 Translate a sequence of arguments into a command line
623 string, using the same rules as the MS C runtime:
624
625 1) Arguments are delimited by white space, which is either a
626 space or a tab.
627
628 2) A string surrounded by double quotation marks is
629 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000630 contained within. A quoted string can be embedded in an
631 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000632
633 3) A double quotation mark preceded by a backslash is
634 interpreted as a literal double quotation mark.
635
636 4) Backslashes are interpreted literally, unless they
637 immediately precede a double quotation mark.
638
639 5) If backslashes immediately precede a double quotation mark,
640 every pair of backslashes is interpreted as a literal
641 backslash. If the number of backslashes is odd, the last
642 backslash escapes the next double quotation mark as
643 described in rule 3.
644 """
645
646 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000647 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
648 # or search http://msdn.microsoft.com for
649 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000650 result = []
651 needquote = False
652 for arg in seq:
653 bs_buf = []
654
655 # Add a space to separate this argument from the others
656 if result:
657 result.append(' ')
658
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000659 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000660 if needquote:
661 result.append('"')
662
663 for c in arg:
664 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000665 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000666 bs_buf.append(c)
667 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000668 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000669 result.append('\\' * len(bs_buf)*2)
670 bs_buf = []
671 result.append('\\"')
672 else:
673 # Normal char
674 if bs_buf:
675 result.extend(bs_buf)
676 bs_buf = []
677 result.append(c)
678
Christian Heimesfdab48e2008-01-20 09:06:41 +0000679 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000680 if bs_buf:
681 result.extend(bs_buf)
682
683 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000684 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000685 result.append('"')
686
687 return ''.join(result)
688
689
Brett Cannona23810f2008-05-26 19:04:21 +0000690# Various tools for executing commands and looking at their output and status.
691#
Brett Cannona23810f2008-05-26 19:04:21 +0000692
693def getstatusoutput(cmd):
Tim Golden60798142013-11-05 12:57:25 +0000694 """ Return (status, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000695
Tim Golden60798142013-11-05 12:57:25 +0000696 Execute the string 'cmd' in a shell with 'check_output' and
697 return a 2-tuple (status, output). Universal newlines mode is used,
698 meaning that the result with be decoded to a string.
699
700 A trailing newline is stripped from the output.
701 The exit status for the command can be interpreted
702 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000703
704 >>> import subprocess
705 >>> subprocess.getstatusoutput('ls /bin/ls')
706 (0, '/bin/ls')
707 >>> subprocess.getstatusoutput('cat /bin/junk')
708 (256, 'cat: /bin/junk: No such file or directory')
709 >>> subprocess.getstatusoutput('/bin/junk')
710 (256, 'sh: /bin/junk: not found')
711 """
Tim Goldene0041752013-11-03 12:53:17 +0000712 try:
713 data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT)
714 status = 0
715 except CalledProcessError as ex:
716 data = ex.output
717 status = ex.returncode
718 if data[-1:] == '\n':
719 data = data[:-1]
720 return status, data
Brett Cannona23810f2008-05-26 19:04:21 +0000721
722def getoutput(cmd):
723 """Return output (stdout or stderr) of executing cmd in a shell.
724
725 Like getstatusoutput(), except the exit status is ignored and the return
726 value is a string containing the command's output. Example:
727
728 >>> import subprocess
729 >>> subprocess.getoutput('ls /bin/ls')
730 '/bin/ls'
731 """
732 return getstatusoutput(cmd)[1]
733
734
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000735_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000736
737
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000738class Popen(object):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200739
740 _child_created = False # Set here since __del__ checks it
741
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700742 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000743 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000744 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
745 shell=False, cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000746 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000747 restore_signals=True, start_new_session=False,
748 pass_fds=()):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000749 """Create new Popen instance."""
750 _cleanup()
751
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400752 self._input = None
753 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000754 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700755 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000756 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000757 raise TypeError("bufsize must be an integer")
758
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000759 if mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000760 if preexec_fn is not None:
761 raise ValueError("preexec_fn is not supported on Windows "
762 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000763 any_stdio_set = (stdin is not None or stdout is not None or
764 stderr is not None)
765 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
766 if any_stdio_set:
767 close_fds = False
768 else:
769 close_fds = True
770 elif close_fds and any_stdio_set:
771 raise ValueError(
772 "close_fds is not supported on Windows platforms"
773 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000774 else:
775 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000776 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
777 close_fds = True
778 if pass_fds and not close_fds:
779 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
780 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000781 if startupinfo is not None:
782 raise ValueError("startupinfo is only supported on Windows "
783 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000784 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000785 raise ValueError("creationflags is only supported on Windows "
786 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000787
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400788 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000789 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000790 self.stdout = None
791 self.stderr = None
792 self.pid = None
793 self.returncode = None
794 self.universal_newlines = universal_newlines
795
796 # Input and output objects. The general principle is like
797 # this:
798 #
799 # Parent Child
800 # ------ -----
801 # p2cwrite ---stdin---> p2cread
802 # c2pread <--stdout--- c2pwrite
803 # errread <--stderr--- errwrite
804 #
805 # On POSIX, the child objects are file descriptors. On
806 # Windows, these are Windows file handles. The parent objects
807 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000808 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000809 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000810
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000811 (p2cread, p2cwrite,
812 c2pread, c2pwrite,
813 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
814
Antoine Pitrouc9982322011-01-04 19:07:07 +0000815 # We wrap OS handles *before* launching the child, otherwise a
816 # quickly terminating child could make our fds unwrappable
817 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000818
Thomas Wouterscf297e42007-02-23 15:07:44 +0000819 if mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000820 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000821 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000822 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000823 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000824 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000825 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000826
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000827 if p2cwrite != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000828 self.stdin = io.open(p2cwrite, 'wb', bufsize)
Andrew Svetlov592df202012-08-15 17:36:15 +0300829 if universal_newlines:
Antoine Pitrouab85ff32011-07-23 22:03:45 +0200830 self.stdin = io.TextIOWrapper(self.stdin, write_through=True)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000831 if c2pread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000832 self.stdout = io.open(c2pread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000833 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000834 self.stdout = io.TextIOWrapper(self.stdout)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000835 if errread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000836 self.stderr = io.open(errread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000837 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000838 self.stderr = io.TextIOWrapper(self.stderr)
Tim Peterse718f612004-10-12 21:51:32 +0000839
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700840 self._closed_child_pipe_fds = False
Antoine Pitrouc9982322011-01-04 19:07:07 +0000841 try:
842 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300843 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000844 startupinfo, creationflags, shell,
845 p2cread, p2cwrite,
846 c2pread, c2pwrite,
847 errread, errwrite,
848 restore_signals, start_new_session)
849 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800850 # Cleanup if the child failed starting.
851 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000852 try:
853 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200854 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800855 pass # Ignore EBADF or other errors.
856
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700857 if not self._closed_child_pipe_fds:
858 to_close = []
859 if stdin == PIPE:
860 to_close.append(p2cread)
861 if stdout == PIPE:
862 to_close.append(c2pwrite)
863 if stderr == PIPE:
864 to_close.append(errwrite)
865 if hasattr(self, '_devnull'):
866 to_close.append(self._devnull)
867 for fd in to_close:
868 try:
869 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700870 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700871 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800872
Antoine Pitrouc9982322011-01-04 19:07:07 +0000873 raise
874
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000875
Guido van Rossum98297ee2007-11-06 21:34:58 +0000876 def _translate_newlines(self, data, encoding):
Andrew Svetlov82860712012-08-19 22:13:41 +0300877 data = data.decode(encoding)
878 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000879
Brian Curtin79cdb662010-12-03 02:46:02 +0000880 def __enter__(self):
881 return self
882
883 def __exit__(self, type, value, traceback):
884 if self.stdout:
885 self.stdout.close()
886 if self.stderr:
887 self.stderr.close()
888 if self.stdin:
889 self.stdin.close()
Gregory P. Smith6b657452011-05-11 21:42:08 -0700890 # Wait for the process to terminate, to avoid zombies.
891 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000892
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200893 def __del__(self, _maxsize=sys.maxsize):
894 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000895 # We didn't get to successfully create a child process.
896 return
897 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000898 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000899 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000900 # Child is still running, keep us alive until we can wait on it.
901 _active.append(self)
902
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200903 def _get_devnull(self):
904 if not hasattr(self, '_devnull'):
905 self._devnull = os.open(os.devnull, os.O_RDWR)
906 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000907
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400908 def communicate(self, input=None, timeout=None):
Peter Astrand23109f02005-03-03 20:28:59 +0000909 """Interact with process: Send data to stdin. Read data from
910 stdout and stderr, until end-of-file is reached. Wait for
Gregory P. Smitha454ef62011-05-22 22:29:49 -0700911 process to terminate. The optional input argument should be
912 bytes to be sent to the child process, or None, if no data
Peter Astrand23109f02005-03-03 20:28:59 +0000913 should be sent to the child.
Tim Peterseba28be2005-03-28 01:08:02 +0000914
Peter Astrand23109f02005-03-03 20:28:59 +0000915 communicate() returns a tuple (stdout, stderr)."""
916
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400917 if self._communication_started and input:
918 raise ValueError("Cannot send input after starting communication")
919
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400920 # Optimization: If we are not worried about timeouts, we haven't
921 # started communicating, and we have one or zero pipes, using select()
922 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200923 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400924 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000925 stdout = None
926 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000927 if self.stdin:
928 if input:
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200929 try:
930 self.stdin.write(input)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200931 except OSError as e:
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200932 if e.errno != errno.EPIPE and e.errno != errno.EINVAL:
933 raise
Peter Astrand23109f02005-03-03 20:28:59 +0000934 self.stdin.close()
935 elif self.stdout:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200936 stdout = _eintr_retry_call(self.stdout.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000937 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000938 elif self.stderr:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200939 stderr = _eintr_retry_call(self.stderr.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000940 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000941 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200942 else:
943 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200944 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200945 else:
946 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000947
Victor Stinner7a8d0812011-04-05 13:13:08 +0200948 try:
949 stdout, stderr = self._communicate(input, endtime, timeout)
950 finally:
951 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400952
Victor Stinner7a8d0812011-04-05 13:13:08 +0200953 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400954
955 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000956
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000957
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000958 def poll(self):
959 return self._internal_poll()
960
961
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400962 def _remaining_time(self, endtime):
963 """Convenience for _communicate when computing timeouts."""
964 if endtime is None:
965 return None
966 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200967 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400968
969
Reid Kleckner2b228f02011-03-16 16:57:54 -0400970 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400971 """Convenience for checking if a timeout has expired."""
972 if endtime is None:
973 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200974 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400975 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400976
977
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000978 if mswindows:
979 #
980 # Windows methods
981 #
982 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +0000983 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000984 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
985 """
Peter Astrandd38ddf42005-02-10 08:32:50 +0000986 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000987 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +0000988
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000989 p2cread, p2cwrite = -1, -1
990 c2pread, c2pwrite = -1, -1
991 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000992
Peter Astrandd38ddf42005-02-10 08:32:50 +0000993 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200994 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000995 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200996 p2cread, _ = _winapi.CreatePipe(None, 0)
997 p2cread = Handle(p2cread)
998 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000999 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001000 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1001 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001002 elif stdin == DEVNULL:
1003 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001004 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001005 p2cread = msvcrt.get_osfhandle(stdin)
1006 else:
1007 # Assuming file-like object
1008 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1009 p2cread = self._make_inheritable(p2cread)
1010
Peter Astrandd38ddf42005-02-10 08:32:50 +00001011 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001012 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001013 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001014 _, c2pwrite = _winapi.CreatePipe(None, 0)
1015 c2pwrite = Handle(c2pwrite)
1016 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001017 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001018 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1019 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001020 elif stdout == DEVNULL:
1021 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001022 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001023 c2pwrite = msvcrt.get_osfhandle(stdout)
1024 else:
1025 # Assuming file-like object
1026 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1027 c2pwrite = self._make_inheritable(c2pwrite)
1028
Peter Astrandd38ddf42005-02-10 08:32:50 +00001029 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001030 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001031 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001032 _, errwrite = _winapi.CreatePipe(None, 0)
1033 errwrite = Handle(errwrite)
1034 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001035 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001036 errread, errwrite = _winapi.CreatePipe(None, 0)
1037 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001038 elif stderr == STDOUT:
1039 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001040 elif stderr == DEVNULL:
1041 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001042 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001043 errwrite = msvcrt.get_osfhandle(stderr)
1044 else:
1045 # Assuming file-like object
1046 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1047 errwrite = self._make_inheritable(errwrite)
1048
1049 return (p2cread, p2cwrite,
1050 c2pread, c2pwrite,
1051 errread, errwrite)
1052
1053
1054 def _make_inheritable(self, handle):
1055 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001056 h = _winapi.DuplicateHandle(
1057 _winapi.GetCurrentProcess(), handle,
1058 _winapi.GetCurrentProcess(), 0, 1,
1059 _winapi.DUPLICATE_SAME_ACCESS)
1060 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001061
1062
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001063 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001064 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001065 startupinfo, creationflags, shell,
1066 p2cread, p2cwrite,
1067 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001068 errread, errwrite,
1069 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001070 """Execute program (MS Windows version)"""
1071
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001072 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001073
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001074 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001075 args = list2cmdline(args)
1076
Peter Astrandc1d65362004-11-07 14:30:34 +00001077 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001078 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001079 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +00001080 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001081 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001082 startupinfo.hStdInput = p2cread
1083 startupinfo.hStdOutput = c2pwrite
1084 startupinfo.hStdError = errwrite
1085
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001086 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001087 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1088 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001089 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001090 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001091
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001092 # Start the process
1093 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001094 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001095 # no special security
1096 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001097 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001098 creationflags,
1099 env,
1100 cwd,
1101 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001102 finally:
1103 # Child is launched. Close the parent's copy of those pipe
1104 # handles that only the child should have open. You need
1105 # to make sure that no handles to the write end of the
1106 # output pipe are maintained in this process or else the
1107 # pipe will not close when the child process exits and the
1108 # ReadFile will hang.
1109 if p2cread != -1:
1110 p2cread.Close()
1111 if c2pwrite != -1:
1112 c2pwrite.Close()
1113 if errwrite != -1:
1114 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001115 if hasattr(self, '_devnull'):
1116 os.close(self._devnull)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001117
1118 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001119 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001120 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001121 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001122 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001123
Brett Cannon84df1e62010-05-14 00:33:40 +00001124 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001125 _WaitForSingleObject=_winapi.WaitForSingleObject,
1126 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1127 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001128 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001129 attribute.
1130
1131 This method is called by __del__, so it can only refer to objects
1132 in its local scope.
1133
1134 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001135 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001136 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1137 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001138 return self.returncode
1139
1140
Reid Kleckner2b228f02011-03-16 16:57:54 -04001141 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001142 """Wait for child process to terminate. Returns returncode
1143 attribute."""
Reid Kleckner2b228f02011-03-16 16:57:54 -04001144 if endtime is not None:
1145 timeout = self._remaining_time(endtime)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001146 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001147 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001148 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001149 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001150 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001151 result = _winapi.WaitForSingleObject(self._handle,
1152 timeout_millis)
1153 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001154 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001155 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001156 return self.returncode
1157
1158
1159 def _readerthread(self, fh, buffer):
1160 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001161 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001162
1163
Reid Kleckner2b228f02011-03-16 16:57:54 -04001164 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001165 # Start reader threads feeding into a list hanging off of this
1166 # object, unless they've already been started.
1167 if self.stdout and not hasattr(self, "_stdout_buff"):
1168 self._stdout_buff = []
1169 self.stdout_thread = \
1170 threading.Thread(target=self._readerthread,
1171 args=(self.stdout, self._stdout_buff))
1172 self.stdout_thread.daemon = True
1173 self.stdout_thread.start()
1174 if self.stderr and not hasattr(self, "_stderr_buff"):
1175 self._stderr_buff = []
1176 self.stderr_thread = \
1177 threading.Thread(target=self._readerthread,
1178 args=(self.stderr, self._stderr_buff))
1179 self.stderr_thread.daemon = True
1180 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001181
1182 if self.stdin:
Peter Astrandd38ddf42005-02-10 08:32:50 +00001183 if input is not None:
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001184 try:
1185 self.stdin.write(input)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +02001186 except OSError as e:
Victor Stinnerd5c8ce72014-02-18 22:00:53 +01001187 if e.errno == errno.EPIPE:
Victor Stinner5f47ac22014-02-18 22:06:35 +01001188 # communicate() should ignore pipe full error
Victor Stinnerd5c8ce72014-02-18 22:00:53 +01001189 pass
1190 elif (e.errno == errno.EINVAL
1191 and self.poll() is not None):
1192 # Issue #19612: stdin.write() fails with EINVAL
1193 # if the process already exited before the write
1194 pass
1195 else:
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001196 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001197 self.stdin.close()
1198
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001199 # Wait for the reader threads, or time out. If we time out, the
1200 # threads remain reading and the fds left open in case the user
1201 # calls communicate again.
1202 if self.stdout is not None:
1203 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001204 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001205 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001206 if self.stderr is not None:
1207 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001208 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001209 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001210
1211 # Collect the output from and close both pipes, now that we know
1212 # both have been read successfully.
1213 stdout = None
1214 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001215 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001216 stdout = self._stdout_buff
1217 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001218 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001219 stderr = self._stderr_buff
1220 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001221
1222 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001223 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001224 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001225 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001226 stderr = stderr[0]
1227
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001228 return (stdout, stderr)
1229
Christian Heimesa342c012008-04-20 21:01:16 +00001230 def send_signal(self, sig):
1231 """Send a signal to the process
1232 """
1233 if sig == signal.SIGTERM:
1234 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001235 elif sig == signal.CTRL_C_EVENT:
1236 os.kill(self.pid, signal.CTRL_C_EVENT)
1237 elif sig == signal.CTRL_BREAK_EVENT:
1238 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001239 else:
Brian Curtin19651362010-09-07 13:24:38 +00001240 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001241
1242 def terminate(self):
1243 """Terminates the process
1244 """
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001245 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001246 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001247 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001248 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1249 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001250 rc = _winapi.GetExitCodeProcess(self._handle)
1251 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001252 raise
1253 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001254
1255 kill = terminate
1256
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001257 else:
1258 #
1259 # POSIX methods
1260 #
1261 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001262 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001263 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1264 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001265 p2cread, p2cwrite = -1, -1
1266 c2pread, c2pwrite = -1, -1
1267 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001268
Peter Astrandd38ddf42005-02-10 08:32:50 +00001269 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001270 pass
1271 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001272 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001273 elif stdin == DEVNULL:
1274 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001275 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001276 p2cread = stdin
1277 else:
1278 # Assuming file-like object
1279 p2cread = stdin.fileno()
1280
Peter Astrandd38ddf42005-02-10 08:32:50 +00001281 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001282 pass
1283 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001284 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001285 elif stdout == DEVNULL:
1286 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001287 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001288 c2pwrite = stdout
1289 else:
1290 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001291 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001292
Peter Astrandd38ddf42005-02-10 08:32:50 +00001293 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001294 pass
1295 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001296 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001297 elif stderr == STDOUT:
1298 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001299 elif stderr == DEVNULL:
1300 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001301 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001302 errwrite = stderr
1303 else:
1304 # Assuming file-like object
1305 errwrite = stderr.fileno()
1306
1307 return (p2cread, p2cwrite,
1308 c2pread, c2pwrite,
1309 errread, errwrite)
1310
1311
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001312 def _close_fds(self, fds_to_keep):
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001313 start_fd = 3
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001314 for fd in sorted(fds_to_keep):
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001315 if fd >= start_fd:
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001316 os.closerange(start_fd, fd)
1317 start_fd = fd + 1
1318 if start_fd <= MAXFD:
1319 os.closerange(start_fd, MAXFD)
1320
1321
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001322 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001323 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001324 startupinfo, creationflags, shell,
1325 p2cread, p2cwrite,
1326 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001327 errread, errwrite,
1328 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001329 """Execute program (POSIX version)"""
1330
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001331 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001332 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001333 else:
1334 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001335
1336 if shell:
1337 args = ["/bin/sh", "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001338 if executable:
1339 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001340
Peter Astrandd38ddf42005-02-10 08:32:50 +00001341 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001342 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001343 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001344
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001345 # For transferring possible exec failure from child to parent.
1346 # Data format: "exception name:hex errno:description"
1347 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001348 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001349 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1350 low_fds_to_close = []
1351 while errpipe_write < 3:
1352 low_fds_to_close.append(errpipe_write)
1353 errpipe_write = os.dup(errpipe_write)
1354 for low_fd in low_fds_to_close:
1355 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001356 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001357 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001358 # We must avoid complex work that could involve
1359 # malloc or free in the child process to avoid
1360 # potential deadlocks, thus we do all this here.
1361 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001362
Victor Stinner372b8382011-06-21 17:24:21 +02001363 if env is not None:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001364 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
1365 for k, v in env.items()]
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001366 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001367 env_list = None # Use execv instead of execve.
1368 executable = os.fsencode(executable)
1369 if os.path.dirname(executable):
1370 executable_list = (executable,)
1371 else:
1372 # This matches the behavior of os._execvpe().
1373 executable_list = tuple(
1374 os.path.join(os.fsencode(dir), executable)
1375 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001376 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001377 fds_to_keep.add(errpipe_write)
1378 self.pid = _posixsubprocess.fork_exec(
1379 args, executable_list,
1380 close_fds, sorted(fds_to_keep), cwd, env_list,
1381 p2cread, p2cwrite, c2pread, c2pwrite,
1382 errread, errwrite,
1383 errpipe_read, errpipe_write,
1384 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001385 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001386 finally:
1387 # be sure the FD is closed no matter what
1388 os.close(errpipe_write)
1389
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001390 # self._devnull is not always defined.
1391 devnull_fd = getattr(self, '_devnull', None)
1392 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001393 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001394 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001395 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001396 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001397 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001398 if devnull_fd is not None:
1399 os.close(devnull_fd)
1400 # Prevent a double close of these fds from __init__ on error.
1401 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001402
1403 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001404 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001405 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001406 while True:
1407 part = _eintr_retry_call(os.read, errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001408 errpipe_data += part
1409 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001410 break
Facundo Batista10706e22009-06-19 20:34:30 +00001411 finally:
1412 # be sure the FD is closed no matter what
1413 os.close(errpipe_read)
1414
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001415 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001416 try:
1417 _eintr_retry_call(os.waitpid, self.pid, 0)
1418 except OSError as e:
1419 if e.errno != errno.ECHILD:
1420 raise
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001421 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001422 exception_name, hex_errno, err_msg = (
1423 errpipe_data.split(b':', 2))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001424 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001425 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001426 hex_errno = b'0'
Gregory P. Smith3aee2222012-11-11 00:04:13 -08001427 err_msg = (b'Bad exception data from child: ' +
1428 repr(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001429 child_exception_type = getattr(
1430 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001431 SubprocessError)
Victor Stinner4d078042010-04-23 19:28:32 +00001432 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001433 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001434 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001435 child_exec_never_called = (err_msg == "noexec")
1436 if child_exec_never_called:
1437 err_msg = ""
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001438 if errno_num != 0:
1439 err_msg = os.strerror(errno_num)
1440 if errno_num == errno.ENOENT:
Gregory P. Smith5591b022012-10-10 03:34:47 -07001441 if child_exec_never_called:
1442 # The error must be from chdir(cwd).
1443 err_msg += ': ' + repr(cwd)
1444 else:
1445 err_msg += ': ' + repr(orig_executable)
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001446 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001447 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001448
1449
Brett Cannon84df1e62010-05-14 00:33:40 +00001450 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1451 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
1452 _WEXITSTATUS=os.WEXITSTATUS):
1453 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001454 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001455 if _WIFSIGNALED(sts):
1456 self.returncode = -_WTERMSIG(sts)
1457 elif _WIFEXITED(sts):
1458 self.returncode = _WEXITSTATUS(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001459 else:
1460 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001461 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001462
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001463
Brett Cannon84df1e62010-05-14 00:33:40 +00001464 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001465 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001466 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001467 attribute.
1468
1469 This method is called by __del__, so it cannot reference anything
1470 outside of the local scope (nor can any methods it calls).
1471
1472 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001473 if self.returncode is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001474 try:
Brett Cannon84df1e62010-05-14 00:33:40 +00001475 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001476 if pid == self.pid:
1477 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001478 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001479 if _deadstate is not None:
1480 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001481 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001482 # This happens if SIGCLD is set to be ignored or
1483 # waiting for child processes has otherwise been
1484 # disabled for our process. This child is dead, we
1485 # can't get the status.
1486 # http://bugs.python.org/issue15756
1487 self.returncode = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001488 return self.returncode
1489
1490
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001491 def _try_wait(self, wait_flags):
1492 try:
1493 (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags)
1494 except OSError as e:
1495 if e.errno != errno.ECHILD:
1496 raise
1497 # This happens if SIGCLD is set to be ignored or waiting
1498 # for child processes has otherwise been disabled for our
1499 # process. This child is dead, we can't get the status.
1500 pid = self.pid
1501 sts = 0
1502 return (pid, sts)
1503
1504
1505 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001506 """Wait for child process to terminate. Returns returncode
1507 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001508 if self.returncode is not None:
1509 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001510
1511 # endtime is preferred to timeout. timeout is only used for
1512 # printing.
1513 if endtime is not None or timeout is not None:
1514 if endtime is None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001515 endtime = _time() + timeout
Reid Kleckner2b228f02011-03-16 16:57:54 -04001516 elif timeout is None:
1517 timeout = self._remaining_time(endtime)
1518
1519 if endtime is not None:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001520 # Enter a busy loop if we have a timeout. This busy loop was
1521 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1522 delay = 0.0005 # 500 us -> initial delay of 1 ms
1523 while True:
1524 (pid, sts) = self._try_wait(os.WNOHANG)
1525 assert pid == self.pid or pid == 0
1526 if pid == self.pid:
1527 self._handle_exitstatus(sts)
1528 break
1529 remaining = self._remaining_time(endtime)
1530 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001531 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001532 delay = min(delay * 2, remaining, .05)
1533 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001534 else:
1535 while self.returncode is None:
1536 (pid, sts) = self._try_wait(0)
1537 # Check the pid and loop as waitpid has been known to return
1538 # 0 even without WNOHANG in odd situations. issue14396.
1539 if pid == self.pid:
1540 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001541 return self.returncode
1542
1543
Reid Kleckner2b228f02011-03-16 16:57:54 -04001544 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001545 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001546 # Flush stdio buffer. This might block, if the user has
1547 # been writing to .stdin in an uncontrolled fashion.
1548 self.stdin.flush()
1549 if not input:
1550 self.stdin.close()
1551
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001552 stdout = None
1553 stderr = None
1554
1555 # Only create this mapping if we haven't already.
1556 if not self._communication_started:
1557 self._fileobj2output = {}
1558 if self.stdout:
1559 self._fileobj2output[self.stdout] = []
1560 if self.stderr:
1561 self._fileobj2output[self.stderr] = []
1562
1563 if self.stdout:
1564 stdout = self._fileobj2output[self.stdout]
1565 if self.stderr:
1566 stderr = self._fileobj2output[self.stderr]
1567
1568 self._save_input(input)
1569
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001570 if self._input:
1571 input_view = memoryview(self._input)
1572
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001573 with _PopenSelector() as selector:
1574 if self.stdin and input:
1575 selector.register(self.stdin, selectors.EVENT_WRITE)
1576 if self.stdout:
1577 selector.register(self.stdout, selectors.EVENT_READ)
1578 if self.stderr:
1579 selector.register(self.stderr, selectors.EVENT_READ)
1580
1581 while selector.get_map():
1582 timeout = self._remaining_time(endtime)
1583 if timeout is not None and timeout < 0:
1584 raise TimeoutExpired(self.args, orig_timeout)
1585
1586 ready = selector.select(timeout)
1587 self._check_timeout(endtime, orig_timeout)
1588
1589 # XXX Rewrite these to use non-blocking I/O on the file
1590 # objects; they are no longer using C stdio!
1591
1592 for key, events in ready:
1593 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001594 chunk = input_view[self._input_offset :
1595 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001596 try:
1597 self._input_offset += os.write(key.fd, chunk)
1598 except OSError as e:
1599 if e.errno == errno.EPIPE:
1600 selector.unregister(key.fileobj)
1601 key.fileobj.close()
1602 else:
1603 raise
1604 else:
1605 if self._input_offset >= len(self._input):
1606 selector.unregister(key.fileobj)
1607 key.fileobj.close()
1608 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001609 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001610 if not data:
1611 selector.unregister(key.fileobj)
1612 key.fileobj.close()
1613 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001614
1615 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001616
1617 # All data exchanged. Translate lists into strings.
1618 if stdout is not None:
1619 stdout = b''.join(stdout)
1620 if stderr is not None:
1621 stderr = b''.join(stderr)
1622
1623 # Translate newlines, if requested.
1624 # This also turns bytes into strings.
1625 if self.universal_newlines:
1626 if stdout is not None:
1627 stdout = self._translate_newlines(stdout,
1628 self.stdout.encoding)
1629 if stderr is not None:
1630 stderr = self._translate_newlines(stderr,
1631 self.stderr.encoding)
1632
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001633 return (stdout, stderr)
1634
1635
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001636 def _save_input(self, input):
1637 # This method is called from the _communicate_with_*() methods
1638 # so that if we time out while communicating, we can continue
1639 # sending input if we retry.
1640 if self.stdin and self._input is None:
1641 self._input_offset = 0
1642 self._input = input
1643 if self.universal_newlines and input is not None:
1644 self._input = self._input.encode(self.stdin.encoding)
1645
1646
Christian Heimesa342c012008-04-20 21:01:16 +00001647 def send_signal(self, sig):
1648 """Send a signal to the process
1649 """
1650 os.kill(self.pid, sig)
1651
1652 def terminate(self):
1653 """Terminate the process with SIGTERM
1654 """
1655 self.send_signal(signal.SIGTERM)
1656
1657 def kill(self):
1658 """Kill the process with SIGKILL
1659 """
1660 self.send_signal(signal.SIGKILL)