blob: 2855d013239da226bd89c0c44127c64d0e0913ba [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
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400107If universal_newlines is False, the file objects stdin, stdout and stderr
Ronald Oussoren385521c2013-07-07 09:26:45 +0200108are opened as binary files, and no line ending conversion is done.
109
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400110If universal_newlines is True, the file objects stdout and stderr are
111opened as a text file, 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
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400118In either case, the process being communicated with should start up
119expecting to receive bytes on its standard input and decode them with
120the same encoding they are sent in.
121
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000122The startupinfo and creationflags, if given, will be passed to the
123underlying CreateProcess() function. They can specify things such as
124appearance of the main window and priority for the new process.
125(Windows only)
126
127
Georg Brandlf9734072008-12-07 15:30:06 +0000128This module also defines some shortcut functions:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000129
Peter Astrand5f5e1412004-12-05 20:15:36 +0000130call(*popenargs, **kwargs):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000131 Run command with arguments. Wait for command to complete, then
132 return the returncode attribute.
133
134 The arguments are the same as for the Popen constructor. Example:
135
Florent Xicluna4886d242010-03-08 13:27:26 +0000136 >>> retcode = subprocess.call(["ls", "-l"])
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000137
Peter Astrand454f7672005-01-01 09:36:35 +0000138check_call(*popenargs, **kwargs):
139 Run command with arguments. Wait for command to complete. If the
140 exit code was zero then return, otherwise raise
141 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000142 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000143
144 The arguments are the same as for the Popen constructor. Example:
145
Florent Xicluna4886d242010-03-08 13:27:26 +0000146 >>> subprocess.check_call(["ls", "-l"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000147 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000148
Brett Cannona23810f2008-05-26 19:04:21 +0000149getstatusoutput(cmd):
150 Return (status, output) of executing cmd in a shell.
151
Tim Golden60798142013-11-05 12:57:25 +0000152 Execute the string 'cmd' in a shell with 'check_output' and
153 return a 2-tuple (status, output). Universal newlines mode is used,
154 meaning that the result with be decoded to a string.
155
156 A trailing newline is stripped from the output.
157 The exit status for the command can be interpreted
158 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000159
Brett Cannona23810f2008-05-26 19:04:21 +0000160 >>> subprocess.getstatusoutput('ls /bin/ls')
161 (0, '/bin/ls')
162 >>> subprocess.getstatusoutput('cat /bin/junk')
163 (256, 'cat: /bin/junk: No such file or directory')
164 >>> subprocess.getstatusoutput('/bin/junk')
165 (256, 'sh: /bin/junk: not found')
166
167getoutput(cmd):
168 Return output (stdout or stderr) of executing cmd in a shell.
169
170 Like getstatusoutput(), except the exit status is ignored and the return
171 value is a string containing the command's output. Example:
172
Brett Cannona23810f2008-05-26 19:04:21 +0000173 >>> subprocess.getoutput('ls /bin/ls')
174 '/bin/ls'
175
Georg Brandlf9734072008-12-07 15:30:06 +0000176check_output(*popenargs, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700177 Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000178
Georg Brandl2708f3a2009-12-20 14:38:23 +0000179 If the exit code was non-zero it raises a CalledProcessError. The
180 CalledProcessError object will have the return code in the returncode
181 attribute and output in the output attribute.
Georg Brandlf9734072008-12-07 15:30:06 +0000182
Georg Brandl2708f3a2009-12-20 14:38:23 +0000183 The arguments are the same as for the Popen constructor. Example:
Georg Brandlf9734072008-12-07 15:30:06 +0000184
Georg Brandl2708f3a2009-12-20 14:38:23 +0000185 >>> output = subprocess.check_output(["ls", "-l", "/dev/null"])
Georg Brandlf9734072008-12-07 15:30:06 +0000186
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300187 There is an additional optional argument, "input", allowing you to
188 pass a string to the subprocess's stdin. If you use this argument
189 you may not also use the Popen constructor's "stdin" argument.
Brett Cannona23810f2008-05-26 19:04:21 +0000190
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400191 If universal_newlines is set to True, the "input" argument must
192 be a string rather than bytes, and the return value will be a string.
193
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000194Exceptions
195----------
196Exceptions raised in the child process, before the new program has
197started to execute, will be re-raised in the parent. Additionally,
198the exception object will have one extra attribute called
199'child_traceback', which is a string containing traceback information
Ezio Melotti30b9d5d2013-08-17 15:50:46 +0300200from the child's point of view.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000201
202The most common exception raised is OSError. This occurs, for
203example, when trying to execute a non-existent file. Applications
204should prepare for OSErrors.
205
206A ValueError will be raised if Popen is called with invalid arguments.
207
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400208Exceptions defined within this module inherit from SubprocessError.
209check_call() and check_output() will raise CalledProcessError if the
Gregory P. Smithb4039aa2011-03-14 14:16:20 -0400210called process returns a non-zero return code. TimeoutExpired
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400211be raised if a timeout was specified and expired.
Peter Astrand454f7672005-01-01 09:36:35 +0000212
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000213
214Security
215--------
216Unlike some other popen functions, this implementation will never call
217/bin/sh implicitly. This means that all characters, including shell
218metacharacters, can safely be passed to child processes.
219
220
221Popen objects
222=============
223Instances of the Popen class have the following methods:
224
225poll()
226 Check if child process has terminated. Returns returncode
227 attribute.
228
229wait()
230 Wait for child process to terminate. Returns returncode attribute.
231
232communicate(input=None)
233 Interact with process: Send data to stdin. Read data from stdout
234 and stderr, until end-of-file is reached. Wait for process to
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400235 terminate. The optional input argument should be data to be
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000236 sent to the child process, or None, if no data should be sent to
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400237 the child. If the Popen instance was constructed with universal_newlines
238 set to True, the input argument should be a string and will be encoded
239 using the preferred system encoding (see locale.getpreferredencoding);
240 if universal_newlines is False, the input argument should be a
241 byte string.
Tim Peterse718f612004-10-12 21:51:32 +0000242
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000243 communicate() returns a tuple (stdout, stderr).
244
245 Note: The data read is buffered in memory, so do not use this
246 method if the data size is large or unlimited.
247
248The following attributes are also available:
249
250stdin
251 If the stdin argument is PIPE, this attribute is a file object
252 that provides input to the child process. Otherwise, it is None.
253
254stdout
255 If the stdout argument is PIPE, this attribute is a file object
256 that provides output from the child process. Otherwise, it is
257 None.
258
259stderr
260 If the stderr argument is PIPE, this attribute is file object that
261 provides error output from the child process. Otherwise, it is
262 None.
263
264pid
265 The process ID of the child process.
266
267returncode
268 The child return code. A None value indicates that the process
269 hasn't terminated yet. A negative value -N indicates that the
Gregory P. Smithf5604852010-12-13 06:45:02 +0000270 child was terminated by signal N (POSIX only).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000271
272
273Replacing older functions with the subprocess module
274====================================================
275In this section, "a ==> b" means that b can be used as a replacement
276for a.
277
278Note: All functions in this section fail (more or less) silently if
279the executed program cannot be found; this module raises an OSError
280exception.
281
282In the following examples, we assume that the subprocess module is
283imported with "from subprocess import *".
284
285
286Replacing /bin/sh shell backquote
287---------------------------------
288output=`mycmd myarg`
289==>
290output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
291
292
293Replacing shell pipe line
294-------------------------
295output=`dmesg | grep hda`
296==>
297p1 = Popen(["dmesg"], stdout=PIPE)
Peter Astrand6fdf3cb2004-11-30 18:06:42 +0000298p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000299output = p2.communicate()[0]
300
301
302Replacing os.system()
303---------------------
304sts = os.system("mycmd" + " myarg")
305==>
306p = Popen("mycmd" + " myarg", shell=True)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000307pid, sts = os.waitpid(p.pid, 0)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000308
309Note:
310
311* Calling the program through the shell is usually not required.
312
313* It's easier to look at the returncode attribute than the
314 exitstatus.
315
316A more real-world example would look like this:
317
318try:
319 retcode = call("mycmd" + " myarg", shell=True)
320 if retcode < 0:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000321 print("Child was terminated by signal", -retcode, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000322 else:
Guido van Rossumc2f93dc2007-05-24 00:50:02 +0000323 print("Child returned", retcode, file=sys.stderr)
324except OSError as e:
325 print("Execution failed:", e, file=sys.stderr)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000326
327
328Replacing os.spawn*
329-------------------
Tim Peterse718f612004-10-12 21:51:32 +0000330P_NOWAIT example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000331
332pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
333==>
334pid = Popen(["/bin/mycmd", "myarg"]).pid
335
336
337P_WAIT example:
338
339retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
340==>
341retcode = call(["/bin/mycmd", "myarg"])
342
343
Tim Peterse718f612004-10-12 21:51:32 +0000344Vector example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000345
346os.spawnvp(os.P_NOWAIT, path, args)
347==>
348Popen([path] + args[1:])
349
350
Tim Peterse718f612004-10-12 21:51:32 +0000351Environment example:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000352
353os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
354==>
355Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000356"""
357
358import sys
359mswindows = (sys.platform == "win32")
360
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000361import io
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000362import os
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400363import time
Christian Heimesa342c012008-04-20 21:01:16 +0000364import signal
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000365import builtins
Gregory P. Smithd23047b2010-12-04 09:10:44 +0000366import warnings
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200367import errno
Victor Stinnerae586492014-09-02 23:18:25 +0200368from time import monotonic as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000369
Peter Astrand454f7672005-01-01 09:36:35 +0000370# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400371class SubprocessError(Exception): pass
372
373
374class CalledProcessError(SubprocessError):
Georg Brandlf9734072008-12-07 15:30:06 +0000375 """This exception is raised when a process run by check_call() or
376 check_output() returns a non-zero exit status.
377 The exit status will be stored in the returncode attribute;
378 check_output() will also store the output in the output attribute.
379 """
380 def __init__(self, returncode, cmd, output=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000381 self.returncode = returncode
382 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000383 self.output = output
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000384 def __str__(self):
385 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
386
Peter Astrand454f7672005-01-01 09:36:35 +0000387
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400388class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400389 """This exception is raised when the timeout expires while waiting for a
390 child process.
391 """
Reid Kleckner2b228f02011-03-16 16:57:54 -0400392 def __init__(self, cmd, timeout, output=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400393 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400394 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400395 self.output = output
396
397 def __str__(self):
398 return ("Command '%s' timed out after %s seconds" %
399 (self.cmd, self.timeout))
400
401
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000402if mswindows:
403 import threading
404 import msvcrt
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200405 import _winapi
Brian Curtin1ce6b582010-04-24 16:19:22 +0000406 class STARTUPINFO:
407 dwFlags = 0
408 hStdInput = None
409 hStdOutput = None
410 hStdError = None
411 wShowWindow = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000412else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700413 import _posixsubprocess
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100414 import select
415 import selectors
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700416 try:
417 import threading
418 except ImportError:
419 import dummy_threading as threading
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000420
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000421 # When select or poll has indicated that the file is writable,
422 # we can write up to _PIPE_BUF bytes without risk of blocking.
423 # POSIX defines PIPE_BUF as >= 512.
424 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
425
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100426 # poll/select have the advantage of not requiring any extra file
427 # descriptor, contrarily to epoll/kqueue (also, they require a single
428 # syscall).
429 if hasattr(selectors, 'PollSelector'):
430 _PopenSelector = selectors.PollSelector
431 else:
432 _PopenSelector = selectors.SelectSelector
433
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000434
Brett Cannona23810f2008-05-26 19:04:21 +0000435__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200436 "getoutput", "check_output", "CalledProcessError", "DEVNULL"]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000437
Brian Curtin1ce6b582010-04-24 16:19:22 +0000438if mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200439 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
440 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
441 STD_ERROR_HANDLE, SW_HIDE,
442 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500443
Brian Curtin08fd8d92011-04-29 16:11:30 -0500444 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500445 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
446 "STD_ERROR_HANDLE", "SW_HIDE",
447 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200448
449 class Handle(int):
450 closed = False
451
452 def Close(self, CloseHandle=_winapi.CloseHandle):
453 if not self.closed:
454 self.closed = True
455 CloseHandle(self)
456
457 def Detach(self):
458 if not self.closed:
459 self.closed = True
460 return int(self)
461 raise ValueError("already closed")
462
463 def __repr__(self):
Serhiy Storchaka465e60e2014-07-25 23:36:00 +0300464 return "%s(%d)" % (self.__class__.__name__, int(self))
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200465
466 __del__ = Close
467 __str__ = __repr__
468
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000469
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200470# This lists holds Popen instances for which the underlying process had not
471# exited at the time its __del__ method got called: those processes are wait()ed
472# for synchronously from _cleanup() when a new Popen object is created, to avoid
473# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000474_active = []
475
476def _cleanup():
477 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000478 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200479 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000480 try:
481 _active.remove(inst)
482 except ValueError:
483 # This can happen if two threads create a new Popen instance.
484 # It's harmless that it was already removed, so ignore.
485 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000486
487PIPE = -1
488STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200489DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000490
491
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000492def _eintr_retry_call(func, *args):
493 while True:
494 try:
495 return func(*args)
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200496 except InterruptedError:
497 continue
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000498
499
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200500# XXX This function is only used by multiprocessing and the test suite,
501# but it's here so that it can be imported when Python is compiled without
502# threads.
503
504def _args_from_interpreter_flags():
505 """Return a list of command-line arguments reproducing the current
506 settings in sys.flags and sys.warnoptions."""
507 flag_opt_map = {
508 'debug': 'd',
509 # 'inspect': 'i',
510 # 'interactive': 'i',
511 'optimize': 'O',
512 'dont_write_bytecode': 'B',
513 'no_user_site': 's',
514 'no_site': 'S',
515 'ignore_environment': 'E',
516 'verbose': 'v',
517 'bytes_warning': 'b',
518 'quiet': 'q',
519 'hash_randomization': 'R',
520 }
521 args = []
522 for flag, opt in flag_opt_map.items():
523 v = getattr(sys.flags, flag)
524 if v > 0:
Nick Coghlanac1a2482013-10-18 22:39:50 +1000525 if flag == 'hash_randomization':
526 v = 1 # Handle specification of an exact seed
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200527 args.append('-' + opt * v)
528 for opt in sys.warnoptions:
529 args.append('-W' + opt)
530 return args
531
532
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400533def call(*popenargs, timeout=None, **kwargs):
534 """Run command with arguments. Wait for command to complete or
535 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000536
537 The arguments are the same as for the Popen constructor. Example:
538
539 retcode = call(["ls", "-l"])
540 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200541 with Popen(*popenargs, **kwargs) as p:
542 try:
543 return p.wait(timeout=timeout)
544 except:
545 p.kill()
546 p.wait()
547 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000548
549
Peter Astrand454f7672005-01-01 09:36:35 +0000550def check_call(*popenargs, **kwargs):
551 """Run command with arguments. Wait for command to complete. If
552 the exit code was zero then return, otherwise raise
553 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000554 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000555
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400556 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000557
558 check_call(["ls", "-l"])
559 """
560 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000561 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000562 cmd = kwargs.get("args")
563 if cmd is None:
564 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000565 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000566 return 0
567
568
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400569def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700570 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000571
572 If the exit code was non-zero it raises a CalledProcessError. The
573 CalledProcessError object will have the return code in the returncode
574 attribute and output in the output attribute.
575
576 The arguments are the same as for the Popen constructor. Example:
577
578 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000579 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000580
581 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000582 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000583
584 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000585 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000586 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000587 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700588
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300589 There is an additional optional argument, "input", allowing you to
590 pass a string to the subprocess's stdin. If you use this argument
591 you may not also use the Popen constructor's "stdin" argument, as
592 it too will be used internally. Example:
593
594 >>> check_output(["sed", "-e", "s/foo/bar/"],
595 ... input=b"when in the course of fooman events\n")
596 b'when in the course of barman events\n'
597
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400598 If universal_newlines=True is passed, the "input" argument must be a
599 string and the return value will be a string rather than bytes.
Georg Brandlf9734072008-12-07 15:30:06 +0000600 """
601 if 'stdout' in kwargs:
602 raise ValueError('stdout argument not allowed, it will be overridden.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300603 if 'input' in kwargs:
604 if 'stdin' in kwargs:
605 raise ValueError('stdin and input arguments may not both be used.')
606 inputdata = kwargs['input']
607 del kwargs['input']
608 kwargs['stdin'] = PIPE
609 else:
610 inputdata = None
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200611 with Popen(*popenargs, stdout=PIPE, **kwargs) as process:
612 try:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300613 output, unused_err = process.communicate(inputdata, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200614 except TimeoutExpired:
615 process.kill()
616 output, unused_err = process.communicate()
617 raise TimeoutExpired(process.args, timeout, output=output)
618 except:
619 process.kill()
620 process.wait()
621 raise
622 retcode = process.poll()
623 if retcode:
624 raise CalledProcessError(retcode, process.args, output=output)
Georg Brandlf9734072008-12-07 15:30:06 +0000625 return output
Peter Astrand454f7672005-01-01 09:36:35 +0000626
627
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000628def list2cmdline(seq):
629 """
630 Translate a sequence of arguments into a command line
631 string, using the same rules as the MS C runtime:
632
633 1) Arguments are delimited by white space, which is either a
634 space or a tab.
635
636 2) A string surrounded by double quotation marks is
637 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000638 contained within. A quoted string can be embedded in an
639 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000640
641 3) A double quotation mark preceded by a backslash is
642 interpreted as a literal double quotation mark.
643
644 4) Backslashes are interpreted literally, unless they
645 immediately precede a double quotation mark.
646
647 5) If backslashes immediately precede a double quotation mark,
648 every pair of backslashes is interpreted as a literal
649 backslash. If the number of backslashes is odd, the last
650 backslash escapes the next double quotation mark as
651 described in rule 3.
652 """
653
654 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000655 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
656 # or search http://msdn.microsoft.com for
657 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000658 result = []
659 needquote = False
660 for arg in seq:
661 bs_buf = []
662
663 # Add a space to separate this argument from the others
664 if result:
665 result.append(' ')
666
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000667 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000668 if needquote:
669 result.append('"')
670
671 for c in arg:
672 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000673 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000674 bs_buf.append(c)
675 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000676 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000677 result.append('\\' * len(bs_buf)*2)
678 bs_buf = []
679 result.append('\\"')
680 else:
681 # Normal char
682 if bs_buf:
683 result.extend(bs_buf)
684 bs_buf = []
685 result.append(c)
686
Christian Heimesfdab48e2008-01-20 09:06:41 +0000687 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000688 if bs_buf:
689 result.extend(bs_buf)
690
691 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000692 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000693 result.append('"')
694
695 return ''.join(result)
696
697
Brett Cannona23810f2008-05-26 19:04:21 +0000698# Various tools for executing commands and looking at their output and status.
699#
Brett Cannona23810f2008-05-26 19:04:21 +0000700
701def getstatusoutput(cmd):
Tim Golden60798142013-11-05 12:57:25 +0000702 """ Return (status, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000703
Tim Golden60798142013-11-05 12:57:25 +0000704 Execute the string 'cmd' in a shell with 'check_output' and
705 return a 2-tuple (status, output). Universal newlines mode is used,
706 meaning that the result with be decoded to a string.
707
708 A trailing newline is stripped from the output.
709 The exit status for the command can be interpreted
710 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000711
712 >>> import subprocess
713 >>> subprocess.getstatusoutput('ls /bin/ls')
714 (0, '/bin/ls')
715 >>> subprocess.getstatusoutput('cat /bin/junk')
716 (256, 'cat: /bin/junk: No such file or directory')
717 >>> subprocess.getstatusoutput('/bin/junk')
718 (256, 'sh: /bin/junk: not found')
719 """
Tim Goldene0041752013-11-03 12:53:17 +0000720 try:
721 data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT)
722 status = 0
723 except CalledProcessError as ex:
724 data = ex.output
725 status = ex.returncode
726 if data[-1:] == '\n':
727 data = data[:-1]
728 return status, data
Brett Cannona23810f2008-05-26 19:04:21 +0000729
730def getoutput(cmd):
731 """Return output (stdout or stderr) of executing cmd in a shell.
732
733 Like getstatusoutput(), except the exit status is ignored and the return
734 value is a string containing the command's output. Example:
735
736 >>> import subprocess
737 >>> subprocess.getoutput('ls /bin/ls')
738 '/bin/ls'
739 """
740 return getstatusoutput(cmd)[1]
741
742
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000743_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000744
745
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000746class Popen(object):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200747
748 _child_created = False # Set here since __del__ checks it
749
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700750 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000751 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000752 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
753 shell=False, cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000754 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000755 restore_signals=True, start_new_session=False,
756 pass_fds=()):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000757 """Create new Popen instance."""
758 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700759 # Held while anything is calling waitpid before returncode has been
760 # updated to prevent clobbering returncode if wait() or poll() are
761 # called from multiple threads at once. After acquiring the lock,
762 # code must re-check self.returncode to see if another thread just
763 # finished a waitpid() call.
764 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000765
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400766 self._input = None
767 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000768 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700769 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000770 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000771 raise TypeError("bufsize must be an integer")
772
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000773 if mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000774 if preexec_fn is not None:
775 raise ValueError("preexec_fn is not supported on Windows "
776 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000777 any_stdio_set = (stdin is not None or stdout is not None or
778 stderr is not None)
779 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
780 if any_stdio_set:
781 close_fds = False
782 else:
783 close_fds = True
784 elif close_fds and any_stdio_set:
785 raise ValueError(
786 "close_fds is not supported on Windows platforms"
787 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000788 else:
789 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000790 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
791 close_fds = True
792 if pass_fds and not close_fds:
793 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
794 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000795 if startupinfo is not None:
796 raise ValueError("startupinfo is only supported on Windows "
797 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000798 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000799 raise ValueError("creationflags is only supported on Windows "
800 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000801
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400802 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000803 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000804 self.stdout = None
805 self.stderr = None
806 self.pid = None
807 self.returncode = None
808 self.universal_newlines = universal_newlines
809
810 # Input and output objects. The general principle is like
811 # this:
812 #
813 # Parent Child
814 # ------ -----
815 # p2cwrite ---stdin---> p2cread
816 # c2pread <--stdout--- c2pwrite
817 # errread <--stderr--- errwrite
818 #
819 # On POSIX, the child objects are file descriptors. On
820 # Windows, these are Windows file handles. The parent objects
821 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000822 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000823 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000824
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000825 (p2cread, p2cwrite,
826 c2pread, c2pwrite,
827 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
828
Antoine Pitrouc9982322011-01-04 19:07:07 +0000829 # We wrap OS handles *before* launching the child, otherwise a
830 # quickly terminating child could make our fds unwrappable
831 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000832
Thomas Wouterscf297e42007-02-23 15:07:44 +0000833 if mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000834 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000835 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000836 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000837 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000838 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000839 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000840
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000841 if p2cwrite != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000842 self.stdin = io.open(p2cwrite, 'wb', bufsize)
Andrew Svetlov592df202012-08-15 17:36:15 +0300843 if universal_newlines:
Antoine Pitrouafe8d062014-09-21 21:10:56 +0200844 self.stdin = io.TextIOWrapper(self.stdin, write_through=True,
845 line_buffering=(bufsize == 1))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000846 if c2pread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000847 self.stdout = io.open(c2pread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000848 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000849 self.stdout = io.TextIOWrapper(self.stdout)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000850 if errread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000851 self.stderr = io.open(errread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000852 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000853 self.stderr = io.TextIOWrapper(self.stderr)
Tim Peterse718f612004-10-12 21:51:32 +0000854
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700855 self._closed_child_pipe_fds = False
Antoine Pitrouc9982322011-01-04 19:07:07 +0000856 try:
857 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300858 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000859 startupinfo, creationflags, shell,
860 p2cread, p2cwrite,
861 c2pread, c2pwrite,
862 errread, errwrite,
863 restore_signals, start_new_session)
864 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800865 # Cleanup if the child failed starting.
866 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000867 try:
868 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200869 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800870 pass # Ignore EBADF or other errors.
871
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700872 if not self._closed_child_pipe_fds:
873 to_close = []
874 if stdin == PIPE:
875 to_close.append(p2cread)
876 if stdout == PIPE:
877 to_close.append(c2pwrite)
878 if stderr == PIPE:
879 to_close.append(errwrite)
880 if hasattr(self, '_devnull'):
881 to_close.append(self._devnull)
882 for fd in to_close:
883 try:
884 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700885 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700886 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800887
Antoine Pitrouc9982322011-01-04 19:07:07 +0000888 raise
889
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000890
Guido van Rossum98297ee2007-11-06 21:34:58 +0000891 def _translate_newlines(self, data, encoding):
Andrew Svetlov82860712012-08-19 22:13:41 +0300892 data = data.decode(encoding)
893 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000894
Brian Curtin79cdb662010-12-03 02:46:02 +0000895 def __enter__(self):
896 return self
897
898 def __exit__(self, type, value, traceback):
899 if self.stdout:
900 self.stdout.close()
901 if self.stderr:
902 self.stderr.close()
903 if self.stdin:
904 self.stdin.close()
Gregory P. Smith6b657452011-05-11 21:42:08 -0700905 # Wait for the process to terminate, to avoid zombies.
906 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000907
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200908 def __del__(self, _maxsize=sys.maxsize):
909 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000910 # We didn't get to successfully create a child process.
911 return
912 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000913 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000914 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000915 # Child is still running, keep us alive until we can wait on it.
916 _active.append(self)
917
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200918 def _get_devnull(self):
919 if not hasattr(self, '_devnull'):
920 self._devnull = os.open(os.devnull, os.O_RDWR)
921 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000922
Victor Stinnera5e881d2015-01-14 17:07:59 +0100923 def _stdin_write(self, input):
924 if input:
925 try:
926 self.stdin.write(input)
927 except BrokenPipeError:
928 # communicate() must ignore broken pipe error
929 pass
930 except OSError as e:
931 if e.errno == errno.EINVAL and self.poll() is not None:
932 # Issue #19612: On Windows, stdin.write() fails with EINVAL
933 # if the process already exited before the write
934 pass
935 else:
936 raise
937 self.stdin.close()
938
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400939 def communicate(self, input=None, timeout=None):
Peter Astrand23109f02005-03-03 20:28:59 +0000940 """Interact with process: Send data to stdin. Read data from
941 stdout and stderr, until end-of-file is reached. Wait for
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400942 process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000943
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400944 The optional "input" argument should be data to be sent to the
945 child process (if self.universal_newlines is True, this should
946 be a string; if it is False, "input" should be bytes), or
947 None, if no data should be sent to the child.
948
949 communicate() returns a tuple (stdout, stderr). These will be
950 bytes or, if self.universal_newlines was True, a string.
951 """
Peter Astrand23109f02005-03-03 20:28:59 +0000952
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400953 if self._communication_started and input:
954 raise ValueError("Cannot send input after starting communication")
955
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400956 # Optimization: If we are not worried about timeouts, we haven't
957 # started communicating, and we have one or zero pipes, using select()
958 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200959 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400960 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000961 stdout = None
962 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000963 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +0100964 self._stdin_write(input)
Peter Astrand23109f02005-03-03 20:28:59 +0000965 elif self.stdout:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200966 stdout = _eintr_retry_call(self.stdout.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000967 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000968 elif self.stderr:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200969 stderr = _eintr_retry_call(self.stderr.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000970 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000971 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200972 else:
973 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200974 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200975 else:
976 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000977
Victor Stinner7a8d0812011-04-05 13:13:08 +0200978 try:
979 stdout, stderr = self._communicate(input, endtime, timeout)
980 finally:
981 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400982
Victor Stinner7a8d0812011-04-05 13:13:08 +0200983 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400984
985 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000986
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000987
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000988 def poll(self):
989 return self._internal_poll()
990
991
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400992 def _remaining_time(self, endtime):
993 """Convenience for _communicate when computing timeouts."""
994 if endtime is None:
995 return None
996 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200997 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400998
999
Reid Kleckner2b228f02011-03-16 16:57:54 -04001000 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001001 """Convenience for checking if a timeout has expired."""
1002 if endtime is None:
1003 return
Victor Stinner949d8c92012-05-30 13:30:32 +02001004 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001005 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001006
1007
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001008 if mswindows:
1009 #
1010 # Windows methods
1011 #
1012 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001013 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001014 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1015 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001016 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001017 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001018
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001019 p2cread, p2cwrite = -1, -1
1020 c2pread, c2pwrite = -1, -1
1021 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001022
Peter Astrandd38ddf42005-02-10 08:32:50 +00001023 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001024 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001025 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001026 p2cread, _ = _winapi.CreatePipe(None, 0)
1027 p2cread = Handle(p2cread)
1028 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001029 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001030 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1031 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001032 elif stdin == DEVNULL:
1033 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001034 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001035 p2cread = msvcrt.get_osfhandle(stdin)
1036 else:
1037 # Assuming file-like object
1038 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1039 p2cread = self._make_inheritable(p2cread)
1040
Peter Astrandd38ddf42005-02-10 08:32:50 +00001041 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001042 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001043 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001044 _, c2pwrite = _winapi.CreatePipe(None, 0)
1045 c2pwrite = Handle(c2pwrite)
1046 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001047 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001048 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1049 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001050 elif stdout == DEVNULL:
1051 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001052 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001053 c2pwrite = msvcrt.get_osfhandle(stdout)
1054 else:
1055 # Assuming file-like object
1056 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1057 c2pwrite = self._make_inheritable(c2pwrite)
1058
Peter Astrandd38ddf42005-02-10 08:32:50 +00001059 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001060 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001061 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001062 _, errwrite = _winapi.CreatePipe(None, 0)
1063 errwrite = Handle(errwrite)
1064 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001065 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001066 errread, errwrite = _winapi.CreatePipe(None, 0)
1067 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001068 elif stderr == STDOUT:
1069 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001070 elif stderr == DEVNULL:
1071 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001072 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001073 errwrite = msvcrt.get_osfhandle(stderr)
1074 else:
1075 # Assuming file-like object
1076 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1077 errwrite = self._make_inheritable(errwrite)
1078
1079 return (p2cread, p2cwrite,
1080 c2pread, c2pwrite,
1081 errread, errwrite)
1082
1083
1084 def _make_inheritable(self, handle):
1085 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001086 h = _winapi.DuplicateHandle(
1087 _winapi.GetCurrentProcess(), handle,
1088 _winapi.GetCurrentProcess(), 0, 1,
1089 _winapi.DUPLICATE_SAME_ACCESS)
1090 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001091
1092
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001093 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001094 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001095 startupinfo, creationflags, shell,
1096 p2cread, p2cwrite,
1097 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001098 errread, errwrite,
1099 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001100 """Execute program (MS Windows version)"""
1101
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001102 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001103
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001104 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001105 args = list2cmdline(args)
1106
Peter Astrandc1d65362004-11-07 14:30:34 +00001107 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001108 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001109 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +00001110 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001111 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001112 startupinfo.hStdInput = p2cread
1113 startupinfo.hStdOutput = c2pwrite
1114 startupinfo.hStdError = errwrite
1115
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001116 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001117 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1118 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001119 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001120 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001121
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001122 # Start the process
1123 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001124 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001125 # no special security
1126 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001127 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001128 creationflags,
1129 env,
1130 cwd,
1131 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001132 finally:
1133 # Child is launched. Close the parent's copy of those pipe
1134 # handles that only the child should have open. You need
1135 # to make sure that no handles to the write end of the
1136 # output pipe are maintained in this process or else the
1137 # pipe will not close when the child process exits and the
1138 # ReadFile will hang.
1139 if p2cread != -1:
1140 p2cread.Close()
1141 if c2pwrite != -1:
1142 c2pwrite.Close()
1143 if errwrite != -1:
1144 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001145 if hasattr(self, '_devnull'):
1146 os.close(self._devnull)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001147
1148 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001149 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001150 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001151 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001152 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001153
Brett Cannon84df1e62010-05-14 00:33:40 +00001154 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001155 _WaitForSingleObject=_winapi.WaitForSingleObject,
1156 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1157 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001158 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001159 attribute.
1160
1161 This method is called by __del__, so it can only refer to objects
1162 in its local scope.
1163
1164 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001165 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001166 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1167 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001168 return self.returncode
1169
1170
Reid Kleckner2b228f02011-03-16 16:57:54 -04001171 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001172 """Wait for child process to terminate. Returns returncode
1173 attribute."""
Reid Kleckner2b228f02011-03-16 16:57:54 -04001174 if endtime is not None:
1175 timeout = self._remaining_time(endtime)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001176 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001177 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001178 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001179 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001180 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001181 result = _winapi.WaitForSingleObject(self._handle,
1182 timeout_millis)
1183 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001184 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001185 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001186 return self.returncode
1187
1188
1189 def _readerthread(self, fh, buffer):
1190 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001191 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001192
1193
Reid Kleckner2b228f02011-03-16 16:57:54 -04001194 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001195 # Start reader threads feeding into a list hanging off of this
1196 # object, unless they've already been started.
1197 if self.stdout and not hasattr(self, "_stdout_buff"):
1198 self._stdout_buff = []
1199 self.stdout_thread = \
1200 threading.Thread(target=self._readerthread,
1201 args=(self.stdout, self._stdout_buff))
1202 self.stdout_thread.daemon = True
1203 self.stdout_thread.start()
1204 if self.stderr and not hasattr(self, "_stderr_buff"):
1205 self._stderr_buff = []
1206 self.stderr_thread = \
1207 threading.Thread(target=self._readerthread,
1208 args=(self.stderr, self._stderr_buff))
1209 self.stderr_thread.daemon = True
1210 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001211
1212 if self.stdin:
Victor Stinnera5e881d2015-01-14 17:07:59 +01001213 self._stdin_write(input)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001214
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001215 # Wait for the reader threads, or time out. If we time out, the
1216 # threads remain reading and the fds left open in case the user
1217 # calls communicate again.
1218 if self.stdout is not None:
1219 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001220 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001221 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001222 if self.stderr is not None:
1223 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001224 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001225 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001226
1227 # Collect the output from and close both pipes, now that we know
1228 # both have been read successfully.
1229 stdout = None
1230 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001231 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001232 stdout = self._stdout_buff
1233 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001234 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001235 stderr = self._stderr_buff
1236 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001237
1238 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001239 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001240 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001241 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001242 stderr = stderr[0]
1243
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001244 return (stdout, stderr)
1245
Christian Heimesa342c012008-04-20 21:01:16 +00001246 def send_signal(self, sig):
1247 """Send a signal to the process
1248 """
1249 if sig == signal.SIGTERM:
1250 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001251 elif sig == signal.CTRL_C_EVENT:
1252 os.kill(self.pid, signal.CTRL_C_EVENT)
1253 elif sig == signal.CTRL_BREAK_EVENT:
1254 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001255 else:
Brian Curtin19651362010-09-07 13:24:38 +00001256 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001257
1258 def terminate(self):
1259 """Terminates the process
1260 """
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001261 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001262 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001263 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001264 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1265 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001266 rc = _winapi.GetExitCodeProcess(self._handle)
1267 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001268 raise
1269 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001270
1271 kill = terminate
1272
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001273 else:
1274 #
1275 # POSIX methods
1276 #
1277 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001278 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001279 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1280 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001281 p2cread, p2cwrite = -1, -1
1282 c2pread, c2pwrite = -1, -1
1283 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001284
Peter Astrandd38ddf42005-02-10 08:32:50 +00001285 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001286 pass
1287 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001288 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001289 elif stdin == DEVNULL:
1290 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001291 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001292 p2cread = stdin
1293 else:
1294 # Assuming file-like object
1295 p2cread = stdin.fileno()
1296
Peter Astrandd38ddf42005-02-10 08:32:50 +00001297 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001298 pass
1299 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001300 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001301 elif stdout == DEVNULL:
1302 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001303 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001304 c2pwrite = stdout
1305 else:
1306 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001307 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001308
Peter Astrandd38ddf42005-02-10 08:32:50 +00001309 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001310 pass
1311 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001312 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001313 elif stderr == STDOUT:
1314 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001315 elif stderr == DEVNULL:
1316 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001317 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001318 errwrite = stderr
1319 else:
1320 # Assuming file-like object
1321 errwrite = stderr.fileno()
1322
1323 return (p2cread, p2cwrite,
1324 c2pread, c2pwrite,
1325 errread, errwrite)
1326
1327
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001328 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001329 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001330 startupinfo, creationflags, shell,
1331 p2cread, p2cwrite,
1332 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001333 errread, errwrite,
1334 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001335 """Execute program (POSIX version)"""
1336
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001337 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001338 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001339 else:
1340 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001341
1342 if shell:
1343 args = ["/bin/sh", "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001344 if executable:
1345 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001346
Peter Astrandd38ddf42005-02-10 08:32:50 +00001347 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001348 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001349 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001350
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001351 # For transferring possible exec failure from child to parent.
1352 # Data format: "exception name:hex errno:description"
1353 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001354 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001355 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1356 low_fds_to_close = []
1357 while errpipe_write < 3:
1358 low_fds_to_close.append(errpipe_write)
1359 errpipe_write = os.dup(errpipe_write)
1360 for low_fd in low_fds_to_close:
1361 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001362 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001363 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001364 # We must avoid complex work that could involve
1365 # malloc or free in the child process to avoid
1366 # potential deadlocks, thus we do all this here.
1367 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001368
Victor Stinner372b8382011-06-21 17:24:21 +02001369 if env is not None:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001370 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
1371 for k, v in env.items()]
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001372 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001373 env_list = None # Use execv instead of execve.
1374 executable = os.fsencode(executable)
1375 if os.path.dirname(executable):
1376 executable_list = (executable,)
1377 else:
1378 # This matches the behavior of os._execvpe().
1379 executable_list = tuple(
1380 os.path.join(os.fsencode(dir), executable)
1381 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001382 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001383 fds_to_keep.add(errpipe_write)
1384 self.pid = _posixsubprocess.fork_exec(
1385 args, executable_list,
1386 close_fds, sorted(fds_to_keep), cwd, env_list,
1387 p2cread, p2cwrite, c2pread, c2pwrite,
1388 errread, errwrite,
1389 errpipe_read, errpipe_write,
1390 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001391 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001392 finally:
1393 # be sure the FD is closed no matter what
1394 os.close(errpipe_write)
1395
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001396 # self._devnull is not always defined.
1397 devnull_fd = getattr(self, '_devnull', None)
1398 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001399 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001400 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001401 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001402 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001403 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001404 if devnull_fd is not None:
1405 os.close(devnull_fd)
1406 # Prevent a double close of these fds from __init__ on error.
1407 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001408
1409 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001410 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001411 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001412 while True:
1413 part = _eintr_retry_call(os.read, errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001414 errpipe_data += part
1415 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001416 break
Facundo Batista10706e22009-06-19 20:34:30 +00001417 finally:
1418 # be sure the FD is closed no matter what
1419 os.close(errpipe_read)
1420
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001421 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001422 try:
1423 _eintr_retry_call(os.waitpid, self.pid, 0)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001424 except ChildProcessError:
1425 pass
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001426 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001427 exception_name, hex_errno, err_msg = (
1428 errpipe_data.split(b':', 2))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001429 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001430 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001431 hex_errno = b'0'
Gregory P. Smith3aee2222012-11-11 00:04:13 -08001432 err_msg = (b'Bad exception data from child: ' +
1433 repr(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001434 child_exception_type = getattr(
1435 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001436 SubprocessError)
Victor Stinner4d078042010-04-23 19:28:32 +00001437 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001438 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001439 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001440 child_exec_never_called = (err_msg == "noexec")
1441 if child_exec_never_called:
1442 err_msg = ""
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001443 if errno_num != 0:
1444 err_msg = os.strerror(errno_num)
1445 if errno_num == errno.ENOENT:
Gregory P. Smith5591b022012-10-10 03:34:47 -07001446 if child_exec_never_called:
1447 # The error must be from chdir(cwd).
1448 err_msg += ': ' + repr(cwd)
1449 else:
1450 err_msg += ': ' + repr(orig_executable)
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001451 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001452 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001453
1454
Brett Cannon84df1e62010-05-14 00:33:40 +00001455 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1456 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
1457 _WEXITSTATUS=os.WEXITSTATUS):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001458 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001459 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001460 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001461 if _WIFSIGNALED(sts):
1462 self.returncode = -_WTERMSIG(sts)
1463 elif _WIFEXITED(sts):
1464 self.returncode = _WEXITSTATUS(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001465 else:
1466 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001467 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001468
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001469
Brett Cannon84df1e62010-05-14 00:33:40 +00001470 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001471 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001472 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001473 attribute.
1474
1475 This method is called by __del__, so it cannot reference anything
1476 outside of the local scope (nor can any methods it calls).
1477
1478 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001479 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001480 if not self._waitpid_lock.acquire(False):
1481 # Something else is busy calling waitpid. Don't allow two
1482 # at once. We know nothing yet.
1483 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001484 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001485 if self.returncode is not None:
1486 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001487 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001488 if pid == self.pid:
1489 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001490 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001491 if _deadstate is not None:
1492 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001493 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001494 # This happens if SIGCLD is set to be ignored or
1495 # waiting for child processes has otherwise been
1496 # disabled for our process. This child is dead, we
1497 # can't get the status.
1498 # http://bugs.python.org/issue15756
1499 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001500 finally:
1501 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001502 return self.returncode
1503
1504
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001505 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001506 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001507 try:
1508 (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001509 except ChildProcessError:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001510 # This happens if SIGCLD is set to be ignored or waiting
1511 # for child processes has otherwise been disabled for our
1512 # process. This child is dead, we can't get the status.
1513 pid = self.pid
1514 sts = 0
1515 return (pid, sts)
1516
1517
1518 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001519 """Wait for child process to terminate. Returns returncode
1520 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001521 if self.returncode is not None:
1522 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001523
1524 # endtime is preferred to timeout. timeout is only used for
1525 # printing.
1526 if endtime is not None or timeout is not None:
1527 if endtime is None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001528 endtime = _time() + timeout
Reid Kleckner2b228f02011-03-16 16:57:54 -04001529 elif timeout is None:
1530 timeout = self._remaining_time(endtime)
1531
1532 if endtime is not None:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001533 # Enter a busy loop if we have a timeout. This busy loop was
1534 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1535 delay = 0.0005 # 500 us -> initial delay of 1 ms
1536 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001537 if self._waitpid_lock.acquire(False):
1538 try:
1539 if self.returncode is not None:
1540 break # Another thread waited.
1541 (pid, sts) = self._try_wait(os.WNOHANG)
1542 assert pid == self.pid or pid == 0
1543 if pid == self.pid:
1544 self._handle_exitstatus(sts)
1545 break
1546 finally:
1547 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001548 remaining = self._remaining_time(endtime)
1549 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001550 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001551 delay = min(delay * 2, remaining, .05)
1552 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001553 else:
1554 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001555 with self._waitpid_lock:
1556 if self.returncode is not None:
1557 break # Another thread waited.
1558 (pid, sts) = self._try_wait(0)
1559 # Check the pid and loop as waitpid has been known to
1560 # return 0 even without WNOHANG in odd situations.
1561 # http://bugs.python.org/issue14396.
1562 if pid == self.pid:
1563 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001564 return self.returncode
1565
1566
Reid Kleckner2b228f02011-03-16 16:57:54 -04001567 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001568 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001569 # Flush stdio buffer. This might block, if the user has
1570 # been writing to .stdin in an uncontrolled fashion.
1571 self.stdin.flush()
1572 if not input:
1573 self.stdin.close()
1574
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001575 stdout = None
1576 stderr = None
1577
1578 # Only create this mapping if we haven't already.
1579 if not self._communication_started:
1580 self._fileobj2output = {}
1581 if self.stdout:
1582 self._fileobj2output[self.stdout] = []
1583 if self.stderr:
1584 self._fileobj2output[self.stderr] = []
1585
1586 if self.stdout:
1587 stdout = self._fileobj2output[self.stdout]
1588 if self.stderr:
1589 stderr = self._fileobj2output[self.stderr]
1590
1591 self._save_input(input)
1592
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001593 if self._input:
1594 input_view = memoryview(self._input)
1595
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001596 with _PopenSelector() as selector:
1597 if self.stdin and input:
1598 selector.register(self.stdin, selectors.EVENT_WRITE)
1599 if self.stdout:
1600 selector.register(self.stdout, selectors.EVENT_READ)
1601 if self.stderr:
1602 selector.register(self.stderr, selectors.EVENT_READ)
1603
1604 while selector.get_map():
1605 timeout = self._remaining_time(endtime)
1606 if timeout is not None and timeout < 0:
1607 raise TimeoutExpired(self.args, orig_timeout)
1608
1609 ready = selector.select(timeout)
1610 self._check_timeout(endtime, orig_timeout)
1611
1612 # XXX Rewrite these to use non-blocking I/O on the file
1613 # objects; they are no longer using C stdio!
1614
1615 for key, events in ready:
1616 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001617 chunk = input_view[self._input_offset :
1618 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001619 try:
1620 self._input_offset += os.write(key.fd, chunk)
Victor Stinnera5e881d2015-01-14 17:07:59 +01001621 except BrokenPipeError:
1622 selector.unregister(key.fileobj)
1623 key.fileobj.close()
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001624 else:
1625 if self._input_offset >= len(self._input):
1626 selector.unregister(key.fileobj)
1627 key.fileobj.close()
1628 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001629 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001630 if not data:
1631 selector.unregister(key.fileobj)
1632 key.fileobj.close()
1633 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001634
1635 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001636
1637 # All data exchanged. Translate lists into strings.
1638 if stdout is not None:
1639 stdout = b''.join(stdout)
1640 if stderr is not None:
1641 stderr = b''.join(stderr)
1642
1643 # Translate newlines, if requested.
1644 # This also turns bytes into strings.
1645 if self.universal_newlines:
1646 if stdout is not None:
1647 stdout = self._translate_newlines(stdout,
1648 self.stdout.encoding)
1649 if stderr is not None:
1650 stderr = self._translate_newlines(stderr,
1651 self.stderr.encoding)
1652
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001653 return (stdout, stderr)
1654
1655
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001656 def _save_input(self, input):
1657 # This method is called from the _communicate_with_*() methods
1658 # so that if we time out while communicating, we can continue
1659 # sending input if we retry.
1660 if self.stdin and self._input is None:
1661 self._input_offset = 0
1662 self._input = input
1663 if self.universal_newlines and input is not None:
1664 self._input = self._input.encode(self.stdin.encoding)
1665
1666
Christian Heimesa342c012008-04-20 21:01:16 +00001667 def send_signal(self, sig):
1668 """Send a signal to the process
1669 """
1670 os.kill(self.pid, sig)
1671
1672 def terminate(self):
1673 """Terminate the process with SIGTERM
1674 """
1675 self.send_signal(signal.SIGTERM)
1676
1677 def kill(self):
1678 """Kill the process with SIGKILL
1679 """
1680 self.send_signal(signal.SIGKILL)