blob: 3ce0ed1bf33f43a0413290d89eaaf405e6137009 [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
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400923 def communicate(self, input=None, timeout=None):
Peter Astrand23109f02005-03-03 20:28:59 +0000924 """Interact with process: Send data to stdin. Read data from
925 stdout and stderr, until end-of-file is reached. Wait for
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400926 process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000927
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400928 The optional "input" argument should be data to be sent to the
929 child process (if self.universal_newlines is True, this should
930 be a string; if it is False, "input" should be bytes), or
931 None, if no data should be sent to the child.
932
933 communicate() returns a tuple (stdout, stderr). These will be
934 bytes or, if self.universal_newlines was True, a string.
935 """
Peter Astrand23109f02005-03-03 20:28:59 +0000936
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400937 if self._communication_started and input:
938 raise ValueError("Cannot send input after starting communication")
939
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400940 # Optimization: If we are not worried about timeouts, we haven't
941 # started communicating, and we have one or zero pipes, using select()
942 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200943 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400944 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000945 stdout = None
946 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000947 if self.stdin:
948 if input:
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200949 try:
950 self.stdin.write(input)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200951 except OSError as e:
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200952 if e.errno != errno.EPIPE and e.errno != errno.EINVAL:
953 raise
Peter Astrand23109f02005-03-03 20:28:59 +0000954 self.stdin.close()
955 elif self.stdout:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200956 stdout = _eintr_retry_call(self.stdout.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000957 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000958 elif self.stderr:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200959 stderr = _eintr_retry_call(self.stderr.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000960 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000961 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200962 else:
963 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200964 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200965 else:
966 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000967
Victor Stinner7a8d0812011-04-05 13:13:08 +0200968 try:
969 stdout, stderr = self._communicate(input, endtime, timeout)
970 finally:
971 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400972
Victor Stinner7a8d0812011-04-05 13:13:08 +0200973 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400974
975 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000976
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000977
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000978 def poll(self):
979 return self._internal_poll()
980
981
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400982 def _remaining_time(self, endtime):
983 """Convenience for _communicate when computing timeouts."""
984 if endtime is None:
985 return None
986 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200987 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400988
989
Reid Kleckner2b228f02011-03-16 16:57:54 -0400990 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400991 """Convenience for checking if a timeout has expired."""
992 if endtime is None:
993 return
Victor Stinner949d8c92012-05-30 13:30:32 +0200994 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -0400995 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400996
997
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000998 if mswindows:
999 #
1000 # Windows methods
1001 #
1002 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001003 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001004 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1005 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001006 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001007 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001008
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001009 p2cread, p2cwrite = -1, -1
1010 c2pread, c2pwrite = -1, -1
1011 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001012
Peter Astrandd38ddf42005-02-10 08:32:50 +00001013 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001014 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001015 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001016 p2cread, _ = _winapi.CreatePipe(None, 0)
1017 p2cread = Handle(p2cread)
1018 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001019 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001020 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1021 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001022 elif stdin == DEVNULL:
1023 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001024 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001025 p2cread = msvcrt.get_osfhandle(stdin)
1026 else:
1027 # Assuming file-like object
1028 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1029 p2cread = self._make_inheritable(p2cread)
1030
Peter Astrandd38ddf42005-02-10 08:32:50 +00001031 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001032 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001033 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001034 _, c2pwrite = _winapi.CreatePipe(None, 0)
1035 c2pwrite = Handle(c2pwrite)
1036 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001037 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001038 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1039 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001040 elif stdout == DEVNULL:
1041 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001042 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001043 c2pwrite = msvcrt.get_osfhandle(stdout)
1044 else:
1045 # Assuming file-like object
1046 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1047 c2pwrite = self._make_inheritable(c2pwrite)
1048
Peter Astrandd38ddf42005-02-10 08:32:50 +00001049 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001050 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001051 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001052 _, errwrite = _winapi.CreatePipe(None, 0)
1053 errwrite = Handle(errwrite)
1054 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001055 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001056 errread, errwrite = _winapi.CreatePipe(None, 0)
1057 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001058 elif stderr == STDOUT:
1059 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001060 elif stderr == DEVNULL:
1061 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001062 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001063 errwrite = msvcrt.get_osfhandle(stderr)
1064 else:
1065 # Assuming file-like object
1066 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1067 errwrite = self._make_inheritable(errwrite)
1068
1069 return (p2cread, p2cwrite,
1070 c2pread, c2pwrite,
1071 errread, errwrite)
1072
1073
1074 def _make_inheritable(self, handle):
1075 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001076 h = _winapi.DuplicateHandle(
1077 _winapi.GetCurrentProcess(), handle,
1078 _winapi.GetCurrentProcess(), 0, 1,
1079 _winapi.DUPLICATE_SAME_ACCESS)
1080 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001081
1082
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001083 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001084 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001085 startupinfo, creationflags, shell,
1086 p2cread, p2cwrite,
1087 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001088 errread, errwrite,
1089 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001090 """Execute program (MS Windows version)"""
1091
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001092 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001093
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001094 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001095 args = list2cmdline(args)
1096
Peter Astrandc1d65362004-11-07 14:30:34 +00001097 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001098 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001099 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +00001100 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001101 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001102 startupinfo.hStdInput = p2cread
1103 startupinfo.hStdOutput = c2pwrite
1104 startupinfo.hStdError = errwrite
1105
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001106 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001107 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1108 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001109 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001110 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001111
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001112 # Start the process
1113 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001114 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001115 # no special security
1116 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001117 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001118 creationflags,
1119 env,
1120 cwd,
1121 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001122 finally:
1123 # Child is launched. Close the parent's copy of those pipe
1124 # handles that only the child should have open. You need
1125 # to make sure that no handles to the write end of the
1126 # output pipe are maintained in this process or else the
1127 # pipe will not close when the child process exits and the
1128 # ReadFile will hang.
1129 if p2cread != -1:
1130 p2cread.Close()
1131 if c2pwrite != -1:
1132 c2pwrite.Close()
1133 if errwrite != -1:
1134 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001135 if hasattr(self, '_devnull'):
1136 os.close(self._devnull)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001137
1138 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001139 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001140 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001141 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001142 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001143
Brett Cannon84df1e62010-05-14 00:33:40 +00001144 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001145 _WaitForSingleObject=_winapi.WaitForSingleObject,
1146 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1147 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001148 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001149 attribute.
1150
1151 This method is called by __del__, so it can only refer to objects
1152 in its local scope.
1153
1154 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001155 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001156 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1157 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001158 return self.returncode
1159
1160
Reid Kleckner2b228f02011-03-16 16:57:54 -04001161 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001162 """Wait for child process to terminate. Returns returncode
1163 attribute."""
Reid Kleckner2b228f02011-03-16 16:57:54 -04001164 if endtime is not None:
1165 timeout = self._remaining_time(endtime)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001166 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001167 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001168 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001169 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001170 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001171 result = _winapi.WaitForSingleObject(self._handle,
1172 timeout_millis)
1173 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001174 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001175 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001176 return self.returncode
1177
1178
1179 def _readerthread(self, fh, buffer):
1180 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001181 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001182
1183
Reid Kleckner2b228f02011-03-16 16:57:54 -04001184 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001185 # Start reader threads feeding into a list hanging off of this
1186 # object, unless they've already been started.
1187 if self.stdout and not hasattr(self, "_stdout_buff"):
1188 self._stdout_buff = []
1189 self.stdout_thread = \
1190 threading.Thread(target=self._readerthread,
1191 args=(self.stdout, self._stdout_buff))
1192 self.stdout_thread.daemon = True
1193 self.stdout_thread.start()
1194 if self.stderr and not hasattr(self, "_stderr_buff"):
1195 self._stderr_buff = []
1196 self.stderr_thread = \
1197 threading.Thread(target=self._readerthread,
1198 args=(self.stderr, self._stderr_buff))
1199 self.stderr_thread.daemon = True
1200 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001201
1202 if self.stdin:
Peter Astrandd38ddf42005-02-10 08:32:50 +00001203 if input is not None:
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001204 try:
1205 self.stdin.write(input)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +02001206 except OSError as e:
Victor Stinnerd5c8ce72014-02-18 22:00:53 +01001207 if e.errno == errno.EPIPE:
Victor Stinner5f47ac22014-02-18 22:06:35 +01001208 # communicate() should ignore pipe full error
Victor Stinnerd5c8ce72014-02-18 22:00:53 +01001209 pass
1210 elif (e.errno == errno.EINVAL
1211 and self.poll() is not None):
1212 # Issue #19612: stdin.write() fails with EINVAL
1213 # if the process already exited before the write
1214 pass
1215 else:
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001216 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001217 self.stdin.close()
1218
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001219 # Wait for the reader threads, or time out. If we time out, the
1220 # threads remain reading and the fds left open in case the user
1221 # calls communicate again.
1222 if self.stdout is not None:
1223 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001224 if self.stdout_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 if self.stderr is not None:
1227 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001228 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001229 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001230
1231 # Collect the output from and close both pipes, now that we know
1232 # both have been read successfully.
1233 stdout = None
1234 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001235 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001236 stdout = self._stdout_buff
1237 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001238 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001239 stderr = self._stderr_buff
1240 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001241
1242 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001243 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001244 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001245 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001246 stderr = stderr[0]
1247
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001248 return (stdout, stderr)
1249
Christian Heimesa342c012008-04-20 21:01:16 +00001250 def send_signal(self, sig):
1251 """Send a signal to the process
1252 """
1253 if sig == signal.SIGTERM:
1254 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001255 elif sig == signal.CTRL_C_EVENT:
1256 os.kill(self.pid, signal.CTRL_C_EVENT)
1257 elif sig == signal.CTRL_BREAK_EVENT:
1258 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001259 else:
Brian Curtin19651362010-09-07 13:24:38 +00001260 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001261
1262 def terminate(self):
1263 """Terminates the process
1264 """
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001265 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001266 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001267 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001268 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1269 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001270 rc = _winapi.GetExitCodeProcess(self._handle)
1271 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001272 raise
1273 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001274
1275 kill = terminate
1276
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001277 else:
1278 #
1279 # POSIX methods
1280 #
1281 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001282 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001283 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1284 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001285 p2cread, p2cwrite = -1, -1
1286 c2pread, c2pwrite = -1, -1
1287 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001288
Peter Astrandd38ddf42005-02-10 08:32:50 +00001289 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001290 pass
1291 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001292 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001293 elif stdin == DEVNULL:
1294 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001295 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001296 p2cread = stdin
1297 else:
1298 # Assuming file-like object
1299 p2cread = stdin.fileno()
1300
Peter Astrandd38ddf42005-02-10 08:32:50 +00001301 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001302 pass
1303 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001304 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001305 elif stdout == DEVNULL:
1306 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001307 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001308 c2pwrite = stdout
1309 else:
1310 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001311 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001312
Peter Astrandd38ddf42005-02-10 08:32:50 +00001313 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001314 pass
1315 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001316 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001317 elif stderr == STDOUT:
1318 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001319 elif stderr == DEVNULL:
1320 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001321 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001322 errwrite = stderr
1323 else:
1324 # Assuming file-like object
1325 errwrite = stderr.fileno()
1326
1327 return (p2cread, p2cwrite,
1328 c2pread, c2pwrite,
1329 errread, errwrite)
1330
1331
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001332 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001333 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001334 startupinfo, creationflags, shell,
1335 p2cread, p2cwrite,
1336 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001337 errread, errwrite,
1338 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001339 """Execute program (POSIX version)"""
1340
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001341 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001342 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001343 else:
1344 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001345
1346 if shell:
1347 args = ["/bin/sh", "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001348 if executable:
1349 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001350
Peter Astrandd38ddf42005-02-10 08:32:50 +00001351 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001352 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001353 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001354
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001355 # For transferring possible exec failure from child to parent.
1356 # Data format: "exception name:hex errno:description"
1357 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001358 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001359 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1360 low_fds_to_close = []
1361 while errpipe_write < 3:
1362 low_fds_to_close.append(errpipe_write)
1363 errpipe_write = os.dup(errpipe_write)
1364 for low_fd in low_fds_to_close:
1365 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001366 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001367 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001368 # We must avoid complex work that could involve
1369 # malloc or free in the child process to avoid
1370 # potential deadlocks, thus we do all this here.
1371 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001372
Victor Stinner372b8382011-06-21 17:24:21 +02001373 if env is not None:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001374 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
1375 for k, v in env.items()]
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001376 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001377 env_list = None # Use execv instead of execve.
1378 executable = os.fsencode(executable)
1379 if os.path.dirname(executable):
1380 executable_list = (executable,)
1381 else:
1382 # This matches the behavior of os._execvpe().
1383 executable_list = tuple(
1384 os.path.join(os.fsencode(dir), executable)
1385 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001386 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001387 fds_to_keep.add(errpipe_write)
1388 self.pid = _posixsubprocess.fork_exec(
1389 args, executable_list,
1390 close_fds, sorted(fds_to_keep), cwd, env_list,
1391 p2cread, p2cwrite, c2pread, c2pwrite,
1392 errread, errwrite,
1393 errpipe_read, errpipe_write,
1394 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001395 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001396 finally:
1397 # be sure the FD is closed no matter what
1398 os.close(errpipe_write)
1399
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001400 # self._devnull is not always defined.
1401 devnull_fd = getattr(self, '_devnull', None)
1402 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001403 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001404 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001405 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001406 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001407 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001408 if devnull_fd is not None:
1409 os.close(devnull_fd)
1410 # Prevent a double close of these fds from __init__ on error.
1411 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001412
1413 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001414 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001415 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001416 while True:
1417 part = _eintr_retry_call(os.read, errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001418 errpipe_data += part
1419 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001420 break
Facundo Batista10706e22009-06-19 20:34:30 +00001421 finally:
1422 # be sure the FD is closed no matter what
1423 os.close(errpipe_read)
1424
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001425 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001426 try:
1427 _eintr_retry_call(os.waitpid, self.pid, 0)
1428 except OSError as e:
1429 if e.errno != errno.ECHILD:
1430 raise
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001431 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001432 exception_name, hex_errno, err_msg = (
1433 errpipe_data.split(b':', 2))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001434 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001435 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001436 hex_errno = b'0'
Gregory P. Smith3aee2222012-11-11 00:04:13 -08001437 err_msg = (b'Bad exception data from child: ' +
1438 repr(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001439 child_exception_type = getattr(
1440 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001441 SubprocessError)
Victor Stinner4d078042010-04-23 19:28:32 +00001442 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001443 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001444 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001445 child_exec_never_called = (err_msg == "noexec")
1446 if child_exec_never_called:
1447 err_msg = ""
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001448 if errno_num != 0:
1449 err_msg = os.strerror(errno_num)
1450 if errno_num == errno.ENOENT:
Gregory P. Smith5591b022012-10-10 03:34:47 -07001451 if child_exec_never_called:
1452 # The error must be from chdir(cwd).
1453 err_msg += ': ' + repr(cwd)
1454 else:
1455 err_msg += ': ' + repr(orig_executable)
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001456 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001457 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001458
1459
Brett Cannon84df1e62010-05-14 00:33:40 +00001460 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1461 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
1462 _WEXITSTATUS=os.WEXITSTATUS):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001463 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001464 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001465 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001466 if _WIFSIGNALED(sts):
1467 self.returncode = -_WTERMSIG(sts)
1468 elif _WIFEXITED(sts):
1469 self.returncode = _WEXITSTATUS(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001470 else:
1471 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001472 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001473
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001474
Brett Cannon84df1e62010-05-14 00:33:40 +00001475 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001476 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001477 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001478 attribute.
1479
1480 This method is called by __del__, so it cannot reference anything
1481 outside of the local scope (nor can any methods it calls).
1482
1483 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001484 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001485 if not self._waitpid_lock.acquire(False):
1486 # Something else is busy calling waitpid. Don't allow two
1487 # at once. We know nothing yet.
1488 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001489 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001490 if self.returncode is not None:
1491 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001492 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001493 if pid == self.pid:
1494 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001495 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001496 if _deadstate is not None:
1497 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001498 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001499 # This happens if SIGCLD is set to be ignored or
1500 # waiting for child processes has otherwise been
1501 # disabled for our process. This child is dead, we
1502 # can't get the status.
1503 # http://bugs.python.org/issue15756
1504 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001505 finally:
1506 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001507 return self.returncode
1508
1509
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001510 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001511 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001512 try:
1513 (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags)
1514 except OSError as e:
1515 if e.errno != errno.ECHILD:
1516 raise
1517 # This happens if SIGCLD is set to be ignored or waiting
1518 # for child processes has otherwise been disabled for our
1519 # process. This child is dead, we can't get the status.
1520 pid = self.pid
1521 sts = 0
1522 return (pid, sts)
1523
1524
1525 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001526 """Wait for child process to terminate. Returns returncode
1527 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001528 if self.returncode is not None:
1529 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001530
1531 # endtime is preferred to timeout. timeout is only used for
1532 # printing.
1533 if endtime is not None or timeout is not None:
1534 if endtime is None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001535 endtime = _time() + timeout
Reid Kleckner2b228f02011-03-16 16:57:54 -04001536 elif timeout is None:
1537 timeout = self._remaining_time(endtime)
1538
1539 if endtime is not None:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001540 # Enter a busy loop if we have a timeout. This busy loop was
1541 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1542 delay = 0.0005 # 500 us -> initial delay of 1 ms
1543 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001544 if self._waitpid_lock.acquire(False):
1545 try:
1546 if self.returncode is not None:
1547 break # Another thread waited.
1548 (pid, sts) = self._try_wait(os.WNOHANG)
1549 assert pid == self.pid or pid == 0
1550 if pid == self.pid:
1551 self._handle_exitstatus(sts)
1552 break
1553 finally:
1554 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001555 remaining = self._remaining_time(endtime)
1556 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001557 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001558 delay = min(delay * 2, remaining, .05)
1559 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001560 else:
1561 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001562 with self._waitpid_lock:
1563 if self.returncode is not None:
1564 break # Another thread waited.
1565 (pid, sts) = self._try_wait(0)
1566 # Check the pid and loop as waitpid has been known to
1567 # return 0 even without WNOHANG in odd situations.
1568 # http://bugs.python.org/issue14396.
1569 if pid == self.pid:
1570 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001571 return self.returncode
1572
1573
Reid Kleckner2b228f02011-03-16 16:57:54 -04001574 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001575 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001576 # Flush stdio buffer. This might block, if the user has
1577 # been writing to .stdin in an uncontrolled fashion.
1578 self.stdin.flush()
1579 if not input:
1580 self.stdin.close()
1581
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001582 stdout = None
1583 stderr = None
1584
1585 # Only create this mapping if we haven't already.
1586 if not self._communication_started:
1587 self._fileobj2output = {}
1588 if self.stdout:
1589 self._fileobj2output[self.stdout] = []
1590 if self.stderr:
1591 self._fileobj2output[self.stderr] = []
1592
1593 if self.stdout:
1594 stdout = self._fileobj2output[self.stdout]
1595 if self.stderr:
1596 stderr = self._fileobj2output[self.stderr]
1597
1598 self._save_input(input)
1599
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001600 if self._input:
1601 input_view = memoryview(self._input)
1602
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001603 with _PopenSelector() as selector:
1604 if self.stdin and input:
1605 selector.register(self.stdin, selectors.EVENT_WRITE)
1606 if self.stdout:
1607 selector.register(self.stdout, selectors.EVENT_READ)
1608 if self.stderr:
1609 selector.register(self.stderr, selectors.EVENT_READ)
1610
1611 while selector.get_map():
1612 timeout = self._remaining_time(endtime)
1613 if timeout is not None and timeout < 0:
1614 raise TimeoutExpired(self.args, orig_timeout)
1615
1616 ready = selector.select(timeout)
1617 self._check_timeout(endtime, orig_timeout)
1618
1619 # XXX Rewrite these to use non-blocking I/O on the file
1620 # objects; they are no longer using C stdio!
1621
1622 for key, events in ready:
1623 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001624 chunk = input_view[self._input_offset :
1625 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001626 try:
1627 self._input_offset += os.write(key.fd, chunk)
1628 except OSError as e:
1629 if e.errno == errno.EPIPE:
1630 selector.unregister(key.fileobj)
1631 key.fileobj.close()
1632 else:
1633 raise
1634 else:
1635 if self._input_offset >= len(self._input):
1636 selector.unregister(key.fileobj)
1637 key.fileobj.close()
1638 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001639 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001640 if not data:
1641 selector.unregister(key.fileobj)
1642 key.fileobj.close()
1643 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001644
1645 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001646
1647 # All data exchanged. Translate lists into strings.
1648 if stdout is not None:
1649 stdout = b''.join(stdout)
1650 if stderr is not None:
1651 stderr = b''.join(stderr)
1652
1653 # Translate newlines, if requested.
1654 # This also turns bytes into strings.
1655 if self.universal_newlines:
1656 if stdout is not None:
1657 stdout = self._translate_newlines(stdout,
1658 self.stdout.encoding)
1659 if stderr is not None:
1660 stderr = self._translate_newlines(stderr,
1661 self.stderr.encoding)
1662
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001663 return (stdout, stderr)
1664
1665
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001666 def _save_input(self, input):
1667 # This method is called from the _communicate_with_*() methods
1668 # so that if we time out while communicating, we can continue
1669 # sending input if we retry.
1670 if self.stdin and self._input is None:
1671 self._input_offset = 0
1672 self._input = input
1673 if self.universal_newlines and input is not None:
1674 self._input = self._input.encode(self.stdin.encoding)
1675
1676
Christian Heimesa342c012008-04-20 21:01:16 +00001677 def send_signal(self, sig):
1678 """Send a signal to the process
1679 """
1680 os.kill(self.pid, sig)
1681
1682 def terminate(self):
1683 """Terminate the process with SIGTERM
1684 """
1685 self.send_signal(signal.SIGTERM)
1686
1687 def kill(self):
1688 """Kill the process with SIGKILL
1689 """
1690 self.send_signal(signal.SIGKILL)