blob: daa3e25c0e4d5b00a6c93db22e1c2cf3e8035d1f [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 Stinner949d8c92012-05-30 13:30:32 +0200368try:
369 from time import monotonic as _time
Brett Cannoncd171c82013-07-04 17:43:24 -0400370except ImportError:
Victor Stinner949d8c92012-05-30 13:30:32 +0200371 from time import time as _time
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000372
Peter Astrand454f7672005-01-01 09:36:35 +0000373# Exception classes used by this module.
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400374class SubprocessError(Exception): pass
375
376
377class CalledProcessError(SubprocessError):
Georg Brandlf9734072008-12-07 15:30:06 +0000378 """This exception is raised when a process run by check_call() or
379 check_output() returns a non-zero exit status.
380 The exit status will be stored in the returncode attribute;
381 check_output() will also store the output in the output attribute.
382 """
383 def __init__(self, returncode, cmd, output=None):
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000384 self.returncode = returncode
385 self.cmd = cmd
Georg Brandlf9734072008-12-07 15:30:06 +0000386 self.output = output
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000387 def __str__(self):
388 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode)
389
Peter Astrand454f7672005-01-01 09:36:35 +0000390
Gregory P. Smith54d412e2011-03-14 14:08:43 -0400391class TimeoutExpired(SubprocessError):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400392 """This exception is raised when the timeout expires while waiting for a
393 child process.
394 """
Reid Kleckner2b228f02011-03-16 16:57:54 -0400395 def __init__(self, cmd, timeout, output=None):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400396 self.cmd = cmd
Reid Kleckner2b228f02011-03-16 16:57:54 -0400397 self.timeout = timeout
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400398 self.output = output
399
400 def __str__(self):
401 return ("Command '%s' timed out after %s seconds" %
402 (self.cmd, self.timeout))
403
404
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000405if mswindows:
406 import threading
407 import msvcrt
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200408 import _winapi
Brian Curtin1ce6b582010-04-24 16:19:22 +0000409 class STARTUPINFO:
410 dwFlags = 0
411 hStdInput = None
412 hStdOutput = None
413 hStdError = None
414 wShowWindow = 0
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000415else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -0700416 import _posixsubprocess
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100417 import select
418 import selectors
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700419 try:
420 import threading
421 except ImportError:
422 import dummy_threading as threading
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000423
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000424 # When select or poll has indicated that the file is writable,
425 # we can write up to _PIPE_BUF bytes without risk of blocking.
426 # POSIX defines PIPE_BUF as >= 512.
427 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512)
428
Charles-François Natali3a4586a2013-11-08 19:56:59 +0100429 # poll/select have the advantage of not requiring any extra file
430 # descriptor, contrarily to epoll/kqueue (also, they require a single
431 # syscall).
432 if hasattr(selectors, 'PollSelector'):
433 _PopenSelector = selectors.PollSelector
434 else:
435 _PopenSelector = selectors.SelectSelector
436
Amaury Forgeot d'Arcace31022009-07-09 22:44:11 +0000437
Brett Cannona23810f2008-05-26 19:04:21 +0000438__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput",
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200439 "getoutput", "check_output", "CalledProcessError", "DEVNULL"]
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000440
Brian Curtin1ce6b582010-04-24 16:19:22 +0000441if mswindows:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200442 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP,
443 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE,
444 STD_ERROR_HANDLE, SW_HIDE,
445 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW)
Brian Curtin5d9deaa2011-04-29 16:24:07 -0500446
Brian Curtin08fd8d92011-04-29 16:11:30 -0500447 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP",
Brian Curtin8b8e7f42011-04-29 15:48:13 -0500448 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE",
449 "STD_ERROR_HANDLE", "SW_HIDE",
450 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"])
Antoine Pitrou23bba4c2012-04-18 20:51:15 +0200451
452 class Handle(int):
453 closed = False
454
455 def Close(self, CloseHandle=_winapi.CloseHandle):
456 if not self.closed:
457 self.closed = True
458 CloseHandle(self)
459
460 def Detach(self):
461 if not self.closed:
462 self.closed = True
463 return int(self)
464 raise ValueError("already closed")
465
466 def __repr__(self):
467 return "Handle(%d)" % int(self)
468
469 __del__ = Close
470 __str__ = __repr__
471
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000472try:
473 MAXFD = os.sysconf("SC_OPEN_MAX")
474except:
475 MAXFD = 256
476
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200477# This lists holds Popen instances for which the underlying process had not
478# exited at the time its __del__ method got called: those processes are wait()ed
479# for synchronously from _cleanup() when a new Popen object is created, to avoid
480# zombie processes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000481_active = []
482
483def _cleanup():
484 for inst in _active[:]:
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000485 res = inst._internal_poll(_deadstate=sys.maxsize)
Charles-François Natali134a8ba2011-08-18 18:49:39 +0200486 if res is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000487 try:
488 _active.remove(inst)
489 except ValueError:
490 # This can happen if two threads create a new Popen instance.
491 # It's harmless that it was already removed, so ignore.
492 pass
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000493
494PIPE = -1
495STDOUT = -2
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200496DEVNULL = -3
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000497
498
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000499def _eintr_retry_call(func, *args):
500 while True:
501 try:
502 return func(*args)
Antoine Pitrou24d659d2011-10-23 23:49:42 +0200503 except InterruptedError:
504 continue
Gregory P. Smitha59c59f2010-03-01 00:17:40 +0000505
506
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200507# XXX This function is only used by multiprocessing and the test suite,
508# but it's here so that it can be imported when Python is compiled without
509# threads.
510
511def _args_from_interpreter_flags():
512 """Return a list of command-line arguments reproducing the current
513 settings in sys.flags and sys.warnoptions."""
514 flag_opt_map = {
515 'debug': 'd',
516 # 'inspect': 'i',
517 # 'interactive': 'i',
518 'optimize': 'O',
519 'dont_write_bytecode': 'B',
520 'no_user_site': 's',
521 'no_site': 'S',
522 'ignore_environment': 'E',
523 'verbose': 'v',
524 'bytes_warning': 'b',
525 'quiet': 'q',
526 'hash_randomization': 'R',
527 }
528 args = []
529 for flag, opt in flag_opt_map.items():
530 v = getattr(sys.flags, flag)
531 if v > 0:
Nick Coghlanac1a2482013-10-18 22:39:50 +1000532 if flag == 'hash_randomization':
533 v = 1 # Handle specification of an exact seed
Antoine Pitrouebdcd852012-05-18 18:33:07 +0200534 args.append('-' + opt * v)
535 for opt in sys.warnoptions:
536 args.append('-W' + opt)
537 return args
538
539
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400540def call(*popenargs, timeout=None, **kwargs):
541 """Run command with arguments. Wait for command to complete or
542 timeout, then return the returncode attribute.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000543
544 The arguments are the same as for the Popen constructor. Example:
545
546 retcode = call(["ls", "-l"])
547 """
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200548 with Popen(*popenargs, **kwargs) as p:
549 try:
550 return p.wait(timeout=timeout)
551 except:
552 p.kill()
553 p.wait()
554 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000555
556
Peter Astrand454f7672005-01-01 09:36:35 +0000557def check_call(*popenargs, **kwargs):
558 """Run command with arguments. Wait for command to complete. If
559 the exit code was zero then return, otherwise raise
560 CalledProcessError. The CalledProcessError object will have the
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000561 return code in the returncode attribute.
Peter Astrand454f7672005-01-01 09:36:35 +0000562
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400563 The arguments are the same as for the call function. Example:
Peter Astrand454f7672005-01-01 09:36:35 +0000564
565 check_call(["ls", "-l"])
566 """
567 retcode = call(*popenargs, **kwargs)
Peter Astrand454f7672005-01-01 09:36:35 +0000568 if retcode:
Georg Brandlf9734072008-12-07 15:30:06 +0000569 cmd = kwargs.get("args")
570 if cmd is None:
571 cmd = popenargs[0]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000572 raise CalledProcessError(retcode, cmd)
Georg Brandlf9734072008-12-07 15:30:06 +0000573 return 0
574
575
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400576def check_output(*popenargs, timeout=None, **kwargs):
Gregory P. Smith91110f52013-03-19 23:25:16 -0700577 r"""Run command with arguments and return its output.
Georg Brandlf9734072008-12-07 15:30:06 +0000578
579 If the exit code was non-zero it raises a CalledProcessError. The
580 CalledProcessError object will have the return code in the returncode
581 attribute and output in the output attribute.
582
583 The arguments are the same as for the Popen constructor. Example:
584
585 >>> check_output(["ls", "-l", "/dev/null"])
Georg Brandl2708f3a2009-12-20 14:38:23 +0000586 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n'
Georg Brandlf9734072008-12-07 15:30:06 +0000587
588 The stdout argument is not allowed as it is used internally.
Georg Brandl127d4702009-12-28 08:10:38 +0000589 To capture standard error in the result, use stderr=STDOUT.
Georg Brandlf9734072008-12-07 15:30:06 +0000590
591 >>> check_output(["/bin/sh", "-c",
Georg Brandl2708f3a2009-12-20 14:38:23 +0000592 ... "ls -l non_existent_file ; exit 0"],
Georg Brandl127d4702009-12-28 08:10:38 +0000593 ... stderr=STDOUT)
Georg Brandl2708f3a2009-12-20 14:38:23 +0000594 b'ls: non_existent_file: No such file or directory\n'
Gregory P. Smith91110f52013-03-19 23:25:16 -0700595
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300596 There is an additional optional argument, "input", allowing you to
597 pass a string to the subprocess's stdin. If you use this argument
598 you may not also use the Popen constructor's "stdin" argument, as
599 it too will be used internally. Example:
600
601 >>> check_output(["sed", "-e", "s/foo/bar/"],
602 ... input=b"when in the course of fooman events\n")
603 b'when in the course of barman events\n'
604
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400605 If universal_newlines=True is passed, the "input" argument must be a
606 string and the return value will be a string rather than bytes.
Georg Brandlf9734072008-12-07 15:30:06 +0000607 """
608 if 'stdout' in kwargs:
609 raise ValueError('stdout argument not allowed, it will be overridden.')
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300610 if 'input' in kwargs:
611 if 'stdin' in kwargs:
612 raise ValueError('stdin and input arguments may not both be used.')
613 inputdata = kwargs['input']
614 del kwargs['input']
615 kwargs['stdin'] = PIPE
616 else:
617 inputdata = None
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200618 with Popen(*popenargs, stdout=PIPE, **kwargs) as process:
619 try:
Serhiy Storchakafcd9f222013-04-22 20:20:54 +0300620 output, unused_err = process.communicate(inputdata, timeout=timeout)
Victor Stinnerc15c88c2011-09-01 23:45:04 +0200621 except TimeoutExpired:
622 process.kill()
623 output, unused_err = process.communicate()
624 raise TimeoutExpired(process.args, timeout, output=output)
625 except:
626 process.kill()
627 process.wait()
628 raise
629 retcode = process.poll()
630 if retcode:
631 raise CalledProcessError(retcode, process.args, output=output)
Georg Brandlf9734072008-12-07 15:30:06 +0000632 return output
Peter Astrand454f7672005-01-01 09:36:35 +0000633
634
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000635def list2cmdline(seq):
636 """
637 Translate a sequence of arguments into a command line
638 string, using the same rules as the MS C runtime:
639
640 1) Arguments are delimited by white space, which is either a
641 space or a tab.
642
643 2) A string surrounded by double quotation marks is
644 interpreted as a single argument, regardless of white space
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000645 contained within. A quoted string can be embedded in an
646 argument.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000647
648 3) A double quotation mark preceded by a backslash is
649 interpreted as a literal double quotation mark.
650
651 4) Backslashes are interpreted literally, unless they
652 immediately precede a double quotation mark.
653
654 5) If backslashes immediately precede a double quotation mark,
655 every pair of backslashes is interpreted as a literal
656 backslash. If the number of backslashes is odd, the last
657 backslash escapes the next double quotation mark as
658 described in rule 3.
659 """
660
661 # See
Eric Smith3c573af2009-11-09 15:23:15 +0000662 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx
663 # or search http://msdn.microsoft.com for
664 # "Parsing C++ Command-Line Arguments"
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000665 result = []
666 needquote = False
667 for arg in seq:
668 bs_buf = []
669
670 # Add a space to separate this argument from the others
671 if result:
672 result.append(' ')
673
Jean-Paul Calderone1ddd4072010-06-18 20:03:54 +0000674 needquote = (" " in arg) or ("\t" in arg) or not arg
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000675 if needquote:
676 result.append('"')
677
678 for c in arg:
679 if c == '\\':
Tim Peterse718f612004-10-12 21:51:32 +0000680 # Don't know if we need to double yet.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000681 bs_buf.append(c)
682 elif c == '"':
Christian Heimesfdab48e2008-01-20 09:06:41 +0000683 # Double backslashes.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000684 result.append('\\' * len(bs_buf)*2)
685 bs_buf = []
686 result.append('\\"')
687 else:
688 # Normal char
689 if bs_buf:
690 result.extend(bs_buf)
691 bs_buf = []
692 result.append(c)
693
Christian Heimesfdab48e2008-01-20 09:06:41 +0000694 # Add remaining backslashes, if any.
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000695 if bs_buf:
696 result.extend(bs_buf)
697
698 if needquote:
Peter Astrand7e78ade2005-03-03 21:10:23 +0000699 result.extend(bs_buf)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000700 result.append('"')
701
702 return ''.join(result)
703
704
Brett Cannona23810f2008-05-26 19:04:21 +0000705# Various tools for executing commands and looking at their output and status.
706#
Brett Cannona23810f2008-05-26 19:04:21 +0000707
708def getstatusoutput(cmd):
Tim Golden60798142013-11-05 12:57:25 +0000709 """ Return (status, output) of executing cmd in a shell.
Brett Cannona23810f2008-05-26 19:04:21 +0000710
Tim Golden60798142013-11-05 12:57:25 +0000711 Execute the string 'cmd' in a shell with 'check_output' and
712 return a 2-tuple (status, output). Universal newlines mode is used,
713 meaning that the result with be decoded to a string.
714
715 A trailing newline is stripped from the output.
716 The exit status for the command can be interpreted
717 according to the rules for the function 'wait'. Example:
Brett Cannona23810f2008-05-26 19:04:21 +0000718
719 >>> import subprocess
720 >>> subprocess.getstatusoutput('ls /bin/ls')
721 (0, '/bin/ls')
722 >>> subprocess.getstatusoutput('cat /bin/junk')
723 (256, 'cat: /bin/junk: No such file or directory')
724 >>> subprocess.getstatusoutput('/bin/junk')
725 (256, 'sh: /bin/junk: not found')
726 """
Tim Goldene0041752013-11-03 12:53:17 +0000727 try:
728 data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT)
729 status = 0
730 except CalledProcessError as ex:
731 data = ex.output
732 status = ex.returncode
733 if data[-1:] == '\n':
734 data = data[:-1]
735 return status, data
Brett Cannona23810f2008-05-26 19:04:21 +0000736
737def getoutput(cmd):
738 """Return output (stdout or stderr) of executing cmd in a shell.
739
740 Like getstatusoutput(), except the exit status is ignored and the return
741 value is a string containing the command's output. Example:
742
743 >>> import subprocess
744 >>> subprocess.getoutput('ls /bin/ls')
745 '/bin/ls'
746 """
747 return getstatusoutput(cmd)[1]
748
749
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000750_PLATFORM_DEFAULT_CLOSE_FDS = object()
Gregory P. Smithf5604852010-12-13 06:45:02 +0000751
752
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000753class Popen(object):
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200754
755 _child_created = False # Set here since __del__ checks it
756
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700757 def __init__(self, args, bufsize=-1, executable=None,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000758 stdin=None, stdout=None, stderr=None,
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000759 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS,
760 shell=False, cwd=None, env=None, universal_newlines=False,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000761 startupinfo=None, creationflags=0,
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +0000762 restore_signals=True, start_new_session=False,
763 pass_fds=()):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000764 """Create new Popen instance."""
765 _cleanup()
Gregory P. Smithd65ba512014-04-23 00:27:17 -0700766 # Held while anything is calling waitpid before returncode has been
767 # updated to prevent clobbering returncode if wait() or poll() are
768 # called from multiple threads at once. After acquiring the lock,
769 # code must re-check self.returncode to see if another thread just
770 # finished a waitpid() call.
771 self._waitpid_lock = threading.Lock()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000772
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400773 self._input = None
774 self._communication_started = False
Guido van Rossum46a05a72007-06-07 21:56:45 +0000775 if bufsize is None:
Gregory P. Smitha1ed5392013-03-23 11:44:25 -0700776 bufsize = -1 # Restore default
Walter Dörwaldaa97f042007-05-03 21:05:51 +0000777 if not isinstance(bufsize, int):
Peter Astrand738131d2004-11-30 21:04:45 +0000778 raise TypeError("bufsize must be an integer")
779
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000780 if mswindows:
Tim Peterse8374a52004-10-13 03:15:00 +0000781 if preexec_fn is not None:
782 raise ValueError("preexec_fn is not supported on Windows "
783 "platforms")
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000784 any_stdio_set = (stdin is not None or stdout is not None or
785 stderr is not None)
786 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
787 if any_stdio_set:
788 close_fds = False
789 else:
790 close_fds = True
791 elif close_fds and any_stdio_set:
792 raise ValueError(
793 "close_fds is not supported on Windows platforms"
794 " if you redirect stdin/stdout/stderr")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000795 else:
796 # POSIX
Gregory P. Smith8edd99d2010-12-14 13:43:30 +0000797 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS:
798 close_fds = True
799 if pass_fds and not close_fds:
800 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning)
801 close_fds = True
Tim Peterse8374a52004-10-13 03:15:00 +0000802 if startupinfo is not None:
803 raise ValueError("startupinfo is only supported on Windows "
804 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000805 if creationflags != 0:
Tim Peterse8374a52004-10-13 03:15:00 +0000806 raise ValueError("creationflags is only supported on Windows "
807 "platforms")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000808
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400809 self.args = args
Tim Peterse718f612004-10-12 21:51:32 +0000810 self.stdin = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000811 self.stdout = None
812 self.stderr = None
813 self.pid = None
814 self.returncode = None
815 self.universal_newlines = universal_newlines
816
817 # Input and output objects. The general principle is like
818 # this:
819 #
820 # Parent Child
821 # ------ -----
822 # p2cwrite ---stdin---> p2cread
823 # c2pread <--stdout--- c2pwrite
824 # errread <--stderr--- errwrite
825 #
826 # On POSIX, the child objects are file descriptors. On
827 # Windows, these are Windows file handles. The parent objects
828 # are file descriptors on both platforms. The parent objects
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000829 # are -1 when not using PIPEs. The child objects are -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000830 # when not redirecting.
Tim Peterse718f612004-10-12 21:51:32 +0000831
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000832 (p2cread, p2cwrite,
833 c2pread, c2pwrite,
834 errread, errwrite) = self._get_handles(stdin, stdout, stderr)
835
Antoine Pitrouc9982322011-01-04 19:07:07 +0000836 # We wrap OS handles *before* launching the child, otherwise a
837 # quickly terminating child could make our fds unwrappable
838 # (see #8458).
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000839
Thomas Wouterscf297e42007-02-23 15:07:44 +0000840 if mswindows:
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000841 if p2cwrite != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000842 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000843 if c2pread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000844 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0)
Florent Xicluna3b8bfef2010-03-14 12:31:06 +0000845 if errread != -1:
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +0000846 errread = msvcrt.open_osfhandle(errread.Detach(), 0)
Thomas Wouterscf297e42007-02-23 15:07:44 +0000847
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000848 if p2cwrite != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000849 self.stdin = io.open(p2cwrite, 'wb', bufsize)
Andrew Svetlov592df202012-08-15 17:36:15 +0300850 if universal_newlines:
Antoine Pitrouab85ff32011-07-23 22:03:45 +0200851 self.stdin = io.TextIOWrapper(self.stdin, write_through=True)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000852 if c2pread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000853 self.stdout = io.open(c2pread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000854 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000855 self.stdout = io.TextIOWrapper(self.stdout)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +0000856 if errread != -1:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000857 self.stderr = io.open(errread, 'rb', bufsize)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000858 if universal_newlines:
Guido van Rossumfa0054a2007-05-24 04:05:35 +0000859 self.stderr = io.TextIOWrapper(self.stderr)
Tim Peterse718f612004-10-12 21:51:32 +0000860
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700861 self._closed_child_pipe_fds = False
Antoine Pitrouc9982322011-01-04 19:07:07 +0000862 try:
863 self._execute_child(args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +0300864 pass_fds, cwd, env,
Antoine Pitrouc9982322011-01-04 19:07:07 +0000865 startupinfo, creationflags, shell,
866 p2cread, p2cwrite,
867 c2pread, c2pwrite,
868 errread, errwrite,
869 restore_signals, start_new_session)
870 except:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800871 # Cleanup if the child failed starting.
872 for f in filter(None, (self.stdin, self.stdout, self.stderr)):
Antoine Pitrouc9982322011-01-04 19:07:07 +0000873 try:
874 f.close()
Andrew Svetlov3438fa42012-12-17 23:35:18 +0200875 except OSError:
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800876 pass # Ignore EBADF or other errors.
877
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700878 if not self._closed_child_pipe_fds:
879 to_close = []
880 if stdin == PIPE:
881 to_close.append(p2cread)
882 if stdout == PIPE:
883 to_close.append(c2pwrite)
884 if stderr == PIPE:
885 to_close.append(errwrite)
886 if hasattr(self, '_devnull'):
887 to_close.append(self._devnull)
888 for fd in to_close:
889 try:
890 os.close(fd)
Gregory P. Smith22ba31a2013-06-15 18:14:56 -0700891 except OSError:
Gregory P. Smithb5461b92013-06-15 18:04:26 -0700892 pass
Gregory P. Smith3d8e7762012-11-10 22:32:22 -0800893
Antoine Pitrouc9982322011-01-04 19:07:07 +0000894 raise
895
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000896
Guido van Rossum98297ee2007-11-06 21:34:58 +0000897 def _translate_newlines(self, data, encoding):
Andrew Svetlov82860712012-08-19 22:13:41 +0300898 data = data.decode(encoding)
899 return data.replace("\r\n", "\n").replace("\r", "\n")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000900
Brian Curtin79cdb662010-12-03 02:46:02 +0000901 def __enter__(self):
902 return self
903
904 def __exit__(self, type, value, traceback):
905 if self.stdout:
906 self.stdout.close()
907 if self.stderr:
908 self.stderr.close()
909 if self.stdin:
910 self.stdin.close()
Gregory P. Smith6b657452011-05-11 21:42:08 -0700911 # Wait for the process to terminate, to avoid zombies.
912 self.wait()
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000913
Serhiy Storchaka72e77612014-02-10 19:20:22 +0200914 def __del__(self, _maxsize=sys.maxsize):
915 if not self._child_created:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000916 # We didn't get to successfully create a child process.
917 return
918 # In case the child hasn't been waited on, check if it's done.
Brett Cannon84df1e62010-05-14 00:33:40 +0000919 self._internal_poll(_deadstate=_maxsize)
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000920 if self.returncode is None and _active is not None:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000921 # Child is still running, keep us alive until we can wait on it.
922 _active.append(self)
923
Ross Lagerwallba102ec2011-03-16 18:40:25 +0200924 def _get_devnull(self):
925 if not hasattr(self, '_devnull'):
926 self._devnull = os.open(os.devnull, os.O_RDWR)
927 return self._devnull
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000928
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400929 def communicate(self, input=None, timeout=None):
Peter Astrand23109f02005-03-03 20:28:59 +0000930 """Interact with process: Send data to stdin. Read data from
931 stdout and stderr, until end-of-file is reached. Wait for
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400932 process to terminate.
Tim Peterseba28be2005-03-28 01:08:02 +0000933
Andrew Kuchling4f7b0c32014-04-14 15:08:18 -0400934 The optional "input" argument should be data to be sent to the
935 child process (if self.universal_newlines is True, this should
936 be a string; if it is False, "input" should be bytes), or
937 None, if no data should be sent to the child.
938
939 communicate() returns a tuple (stdout, stderr). These will be
940 bytes or, if self.universal_newlines was True, a string.
941 """
Peter Astrand23109f02005-03-03 20:28:59 +0000942
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400943 if self._communication_started and input:
944 raise ValueError("Cannot send input after starting communication")
945
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400946 # Optimization: If we are not worried about timeouts, we haven't
947 # started communicating, and we have one or zero pipes, using select()
948 # or threads is unnecessary.
Victor Stinner7a8d0812011-04-05 13:13:08 +0200949 if (timeout is None and not self._communication_started and
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400950 [self.stdin, self.stdout, self.stderr].count(None) >= 2):
Tim Peterseba28be2005-03-28 01:08:02 +0000951 stdout = None
952 stderr = None
Peter Astrand23109f02005-03-03 20:28:59 +0000953 if self.stdin:
954 if input:
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200955 try:
956 self.stdin.write(input)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +0200957 except OSError as e:
Ross Lagerwall4f61b022011-04-05 15:34:00 +0200958 if e.errno != errno.EPIPE and e.errno != errno.EINVAL:
959 raise
Peter Astrand23109f02005-03-03 20:28:59 +0000960 self.stdin.close()
961 elif self.stdout:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200962 stdout = _eintr_retry_call(self.stdout.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000963 self.stdout.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000964 elif self.stderr:
Victor Stinner2cfb6f32011-07-05 14:00:56 +0200965 stderr = _eintr_retry_call(self.stderr.read)
Georg Brandlf08a9dd2008-06-10 16:57:31 +0000966 self.stderr.close()
Peter Astrand23109f02005-03-03 20:28:59 +0000967 self.wait()
Victor Stinner7a8d0812011-04-05 13:13:08 +0200968 else:
969 if timeout is not None:
Victor Stinner949d8c92012-05-30 13:30:32 +0200970 endtime = _time() + timeout
Victor Stinner7a8d0812011-04-05 13:13:08 +0200971 else:
972 endtime = None
Tim Peterseba28be2005-03-28 01:08:02 +0000973
Victor Stinner7a8d0812011-04-05 13:13:08 +0200974 try:
975 stdout, stderr = self._communicate(input, endtime, timeout)
976 finally:
977 self._communication_started = True
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400978
Victor Stinner7a8d0812011-04-05 13:13:08 +0200979 sts = self.wait(timeout=self._remaining_time(endtime))
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400980
981 return (stdout, stderr)
Peter Astrand23109f02005-03-03 20:28:59 +0000982
Fredrik Lundh5b3687d2004-10-12 15:26:28 +0000983
Georg Brandl6aa2d1f2008-08-12 08:35:52 +0000984 def poll(self):
985 return self._internal_poll()
986
987
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400988 def _remaining_time(self, endtime):
989 """Convenience for _communicate when computing timeouts."""
990 if endtime is None:
991 return None
992 else:
Victor Stinner949d8c92012-05-30 13:30:32 +0200993 return endtime - _time()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400994
995
Reid Kleckner2b228f02011-03-16 16:57:54 -0400996 def _check_timeout(self, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -0400997 """Convenience for checking if a timeout has expired."""
998 if endtime is None:
999 return
Victor Stinner949d8c92012-05-30 13:30:32 +02001000 if _time() > endtime:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001001 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001002
1003
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001004 if mswindows:
1005 #
1006 # Windows methods
1007 #
1008 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001009 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001010 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1011 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001012 if stdin is None and stdout is None and stderr is None:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001013 return (-1, -1, -1, -1, -1, -1)
Tim Peterse718f612004-10-12 21:51:32 +00001014
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001015 p2cread, p2cwrite = -1, -1
1016 c2pread, c2pwrite = -1, -1
1017 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001018
Peter Astrandd38ddf42005-02-10 08:32:50 +00001019 if stdin is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001020 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001021 if p2cread is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001022 p2cread, _ = _winapi.CreatePipe(None, 0)
1023 p2cread = Handle(p2cread)
1024 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001025 elif stdin == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001026 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1027 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001028 elif stdin == DEVNULL:
1029 p2cread = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001030 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001031 p2cread = msvcrt.get_osfhandle(stdin)
1032 else:
1033 # Assuming file-like object
1034 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1035 p2cread = self._make_inheritable(p2cread)
1036
Peter Astrandd38ddf42005-02-10 08:32:50 +00001037 if stdout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001038 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001039 if c2pwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001040 _, c2pwrite = _winapi.CreatePipe(None, 0)
1041 c2pwrite = Handle(c2pwrite)
1042 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001043 elif stdout == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001044 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1045 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001046 elif stdout == DEVNULL:
1047 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001048 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001049 c2pwrite = msvcrt.get_osfhandle(stdout)
1050 else:
1051 # Assuming file-like object
1052 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1053 c2pwrite = self._make_inheritable(c2pwrite)
1054
Peter Astrandd38ddf42005-02-10 08:32:50 +00001055 if stderr is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001056 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001057 if errwrite is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001058 _, errwrite = _winapi.CreatePipe(None, 0)
1059 errwrite = Handle(errwrite)
1060 _winapi.CloseHandle(_)
Hirokazu Yamamoto0c988172009-03-03 22:41:26 +00001061 elif stderr == PIPE:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001062 errread, errwrite = _winapi.CreatePipe(None, 0)
1063 errread, errwrite = Handle(errread), Handle(errwrite)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001064 elif stderr == STDOUT:
1065 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001066 elif stderr == DEVNULL:
1067 errwrite = msvcrt.get_osfhandle(self._get_devnull())
Peter Astrandd38ddf42005-02-10 08:32:50 +00001068 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001069 errwrite = msvcrt.get_osfhandle(stderr)
1070 else:
1071 # Assuming file-like object
1072 errwrite = msvcrt.get_osfhandle(stderr.fileno())
1073 errwrite = self._make_inheritable(errwrite)
1074
1075 return (p2cread, p2cwrite,
1076 c2pread, c2pwrite,
1077 errread, errwrite)
1078
1079
1080 def _make_inheritable(self, handle):
1081 """Return a duplicate of handle, which is inheritable"""
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001082 h = _winapi.DuplicateHandle(
1083 _winapi.GetCurrentProcess(), handle,
1084 _winapi.GetCurrentProcess(), 0, 1,
1085 _winapi.DUPLICATE_SAME_ACCESS)
1086 return Handle(h)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001087
1088
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001089 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001090 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001091 startupinfo, creationflags, shell,
1092 p2cread, p2cwrite,
1093 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001094 errread, errwrite,
1095 unused_restore_signals, unused_start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001096 """Execute program (MS Windows version)"""
1097
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001098 assert not pass_fds, "pass_fds not supported on Windows."
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001099
Guido van Rossum3172c5d2007-10-16 18:12:55 +00001100 if not isinstance(args, str):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001101 args = list2cmdline(args)
1102
Peter Astrandc1d65362004-11-07 14:30:34 +00001103 # Process startup details
Peter Astrandd38ddf42005-02-10 08:32:50 +00001104 if startupinfo is None:
Thomas Wouters73e5a5b2006-06-08 15:35:45 +00001105 startupinfo = STARTUPINFO()
Victor Stinnerb3693582010-05-21 20:13:12 +00001106 if -1 not in (p2cread, c2pwrite, errwrite):
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001107 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES
Peter Astrandc1d65362004-11-07 14:30:34 +00001108 startupinfo.hStdInput = p2cread
1109 startupinfo.hStdOutput = c2pwrite
1110 startupinfo.hStdError = errwrite
1111
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001112 if shell:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001113 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW
1114 startupinfo.wShowWindow = _winapi.SW_HIDE
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001115 comspec = os.environ.get("COMSPEC", "cmd.exe")
Tim Golden126c2962010-08-11 14:20:40 +00001116 args = '{} /c "{}"'.format (comspec, args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001117
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001118 # Start the process
1119 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001120 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
Tim Peterse8374a52004-10-13 03:15:00 +00001121 # no special security
1122 None, None,
Guido van Rossume7ba4952007-06-06 23:52:48 +00001123 int(not close_fds),
Tim Peterse8374a52004-10-13 03:15:00 +00001124 creationflags,
1125 env,
1126 cwd,
1127 startupinfo)
Tim Goldenad537f22010-08-08 11:18:16 +00001128 finally:
1129 # Child is launched. Close the parent's copy of those pipe
1130 # handles that only the child should have open. You need
1131 # to make sure that no handles to the write end of the
1132 # output pipe are maintained in this process or else the
1133 # pipe will not close when the child process exits and the
1134 # ReadFile will hang.
1135 if p2cread != -1:
1136 p2cread.Close()
1137 if c2pwrite != -1:
1138 c2pwrite.Close()
1139 if errwrite != -1:
1140 errwrite.Close()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001141 if hasattr(self, '_devnull'):
1142 os.close(self._devnull)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001143
1144 # Retain the process handle, but close the thread handle
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001145 self._child_created = True
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001146 self._handle = Handle(hp)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001147 self.pid = pid
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001148 _winapi.CloseHandle(ht)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001149
Brett Cannon84df1e62010-05-14 00:33:40 +00001150 def _internal_poll(self, _deadstate=None,
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001151 _WaitForSingleObject=_winapi.WaitForSingleObject,
1152 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0,
1153 _GetExitCodeProcess=_winapi.GetExitCodeProcess):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001154 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001155 attribute.
1156
1157 This method is called by __del__, so it can only refer to objects
1158 in its local scope.
1159
1160 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001161 if self.returncode is None:
Brett Cannon84df1e62010-05-14 00:33:40 +00001162 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0:
1163 self.returncode = _GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001164 return self.returncode
1165
1166
Reid Kleckner2b228f02011-03-16 16:57:54 -04001167 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001168 """Wait for child process to terminate. Returns returncode
1169 attribute."""
Reid Kleckner2b228f02011-03-16 16:57:54 -04001170 if endtime is not None:
1171 timeout = self._remaining_time(endtime)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001172 if timeout is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001173 timeout_millis = _winapi.INFINITE
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001174 else:
Reid Kleckner91156ff2011-03-21 10:06:10 -07001175 timeout_millis = int(timeout * 1000)
Peter Astrandd38ddf42005-02-10 08:32:50 +00001176 if self.returncode is None:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001177 result = _winapi.WaitForSingleObject(self._handle,
1178 timeout_millis)
1179 if result == _winapi.WAIT_TIMEOUT:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001180 raise TimeoutExpired(self.args, timeout)
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001181 self.returncode = _winapi.GetExitCodeProcess(self._handle)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001182 return self.returncode
1183
1184
1185 def _readerthread(self, fh, buffer):
1186 buffer.append(fh.read())
Victor Stinner667d4b52010-12-25 22:40:32 +00001187 fh.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001188
1189
Reid Kleckner2b228f02011-03-16 16:57:54 -04001190 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001191 # Start reader threads feeding into a list hanging off of this
1192 # object, unless they've already been started.
1193 if self.stdout and not hasattr(self, "_stdout_buff"):
1194 self._stdout_buff = []
1195 self.stdout_thread = \
1196 threading.Thread(target=self._readerthread,
1197 args=(self.stdout, self._stdout_buff))
1198 self.stdout_thread.daemon = True
1199 self.stdout_thread.start()
1200 if self.stderr and not hasattr(self, "_stderr_buff"):
1201 self._stderr_buff = []
1202 self.stderr_thread = \
1203 threading.Thread(target=self._readerthread,
1204 args=(self.stderr, self._stderr_buff))
1205 self.stderr_thread.daemon = True
1206 self.stderr_thread.start()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001207
1208 if self.stdin:
Peter Astrandd38ddf42005-02-10 08:32:50 +00001209 if input is not None:
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001210 try:
1211 self.stdin.write(input)
Andrew Svetlovf7a17b42012-12-25 16:47:37 +02001212 except OSError as e:
Victor Stinnerd5c8ce72014-02-18 22:00:53 +01001213 if e.errno == errno.EPIPE:
Victor Stinner5f47ac22014-02-18 22:06:35 +01001214 # communicate() should ignore pipe full error
Victor Stinnerd5c8ce72014-02-18 22:00:53 +01001215 pass
1216 elif (e.errno == errno.EINVAL
1217 and self.poll() is not None):
1218 # Issue #19612: stdin.write() fails with EINVAL
1219 # if the process already exited before the write
1220 pass
1221 else:
Ross Lagerwall4f61b022011-04-05 15:34:00 +02001222 raise
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001223 self.stdin.close()
1224
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001225 # Wait for the reader threads, or time out. If we time out, the
1226 # threads remain reading and the fds left open in case the user
1227 # calls communicate again.
1228 if self.stdout is not None:
1229 self.stdout_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001230 if self.stdout_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001231 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001232 if self.stderr is not None:
1233 self.stderr_thread.join(self._remaining_time(endtime))
Andrew Svetlov377a1522012-08-19 20:49:39 +03001234 if self.stderr_thread.is_alive():
Reid Kleckner9a67e6c2011-03-20 08:28:07 -07001235 raise TimeoutExpired(self.args, orig_timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001236
1237 # Collect the output from and close both pipes, now that we know
1238 # both have been read successfully.
1239 stdout = None
1240 stderr = None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001241 if self.stdout:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001242 stdout = self._stdout_buff
1243 self.stdout.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001244 if self.stderr:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001245 stderr = self._stderr_buff
1246 self.stderr.close()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001247
1248 # All data exchanged. Translate lists into strings.
Peter Astrandd38ddf42005-02-10 08:32:50 +00001249 if stdout is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001250 stdout = stdout[0]
Peter Astrandd38ddf42005-02-10 08:32:50 +00001251 if stderr is not None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001252 stderr = stderr[0]
1253
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001254 return (stdout, stderr)
1255
Christian Heimesa342c012008-04-20 21:01:16 +00001256 def send_signal(self, sig):
1257 """Send a signal to the process
1258 """
1259 if sig == signal.SIGTERM:
1260 self.terminate()
Brian Curtineb24d742010-04-12 17:16:38 +00001261 elif sig == signal.CTRL_C_EVENT:
1262 os.kill(self.pid, signal.CTRL_C_EVENT)
1263 elif sig == signal.CTRL_BREAK_EVENT:
1264 os.kill(self.pid, signal.CTRL_BREAK_EVENT)
Christian Heimesa342c012008-04-20 21:01:16 +00001265 else:
Brian Curtin19651362010-09-07 13:24:38 +00001266 raise ValueError("Unsupported signal: {}".format(sig))
Christian Heimesa342c012008-04-20 21:01:16 +00001267
1268 def terminate(self):
1269 """Terminates the process
1270 """
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001271 try:
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001272 _winapi.TerminateProcess(self._handle, 1)
Antoine Pitroub69ef162012-03-11 19:33:29 +01001273 except PermissionError:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001274 # ERROR_ACCESS_DENIED (winerror 5) is received when the
1275 # process already died.
Antoine Pitrou23bba4c2012-04-18 20:51:15 +02001276 rc = _winapi.GetExitCodeProcess(self._handle)
1277 if rc == _winapi.STILL_ACTIVE:
Antoine Pitrou1f9a8352012-03-11 19:29:12 +01001278 raise
1279 self.returncode = rc
Christian Heimesa342c012008-04-20 21:01:16 +00001280
1281 kill = terminate
1282
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001283 else:
1284 #
1285 # POSIX methods
1286 #
1287 def _get_handles(self, stdin, stdout, stderr):
Alexandre Vassalotti711ed4a2009-07-17 10:42:05 +00001288 """Construct and return tuple with IO objects:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001289 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1290 """
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001291 p2cread, p2cwrite = -1, -1
1292 c2pread, c2pwrite = -1, -1
1293 errread, errwrite = -1, -1
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001294
Peter Astrandd38ddf42005-02-10 08:32:50 +00001295 if stdin is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001296 pass
1297 elif stdin == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001298 p2cread, p2cwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001299 elif stdin == DEVNULL:
1300 p2cread = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001301 elif isinstance(stdin, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001302 p2cread = stdin
1303 else:
1304 # Assuming file-like object
1305 p2cread = stdin.fileno()
1306
Peter Astrandd38ddf42005-02-10 08:32:50 +00001307 if stdout is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001308 pass
1309 elif stdout == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001310 c2pread, c2pwrite = os.pipe()
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001311 elif stdout == DEVNULL:
1312 c2pwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001313 elif isinstance(stdout, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001314 c2pwrite = stdout
1315 else:
1316 # Assuming file-like object
Tim Peterse718f612004-10-12 21:51:32 +00001317 c2pwrite = stdout.fileno()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001318
Peter Astrandd38ddf42005-02-10 08:32:50 +00001319 if stderr is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001320 pass
1321 elif stderr == PIPE:
Victor Stinnerdaf45552013-08-28 00:53:59 +02001322 errread, errwrite = os.pipe()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001323 elif stderr == STDOUT:
1324 errwrite = c2pwrite
Ross Lagerwallba102ec2011-03-16 18:40:25 +02001325 elif stderr == DEVNULL:
1326 errwrite = self._get_devnull()
Peter Astrandd38ddf42005-02-10 08:32:50 +00001327 elif isinstance(stderr, int):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001328 errwrite = stderr
1329 else:
1330 # Assuming file-like object
1331 errwrite = stderr.fileno()
1332
1333 return (p2cread, p2cwrite,
1334 c2pread, c2pwrite,
1335 errread, errwrite)
1336
1337
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001338 def _close_fds(self, fds_to_keep):
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001339 start_fd = 3
Antoine Pitrou47f14ba2011-01-03 23:42:01 +00001340 for fd in sorted(fds_to_keep):
Gregory P. Smith8edd99d2010-12-14 13:43:30 +00001341 if fd >= start_fd:
Gregory P. Smithd4cc7bf2010-12-04 11:22:11 +00001342 os.closerange(start_fd, fd)
1343 start_fd = fd + 1
1344 if start_fd <= MAXFD:
1345 os.closerange(start_fd, MAXFD)
1346
1347
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001348 def _execute_child(self, args, executable, preexec_fn, close_fds,
Andrew Svetlov592df202012-08-15 17:36:15 +03001349 pass_fds, cwd, env,
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001350 startupinfo, creationflags, shell,
1351 p2cread, p2cwrite,
1352 c2pread, c2pwrite,
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001353 errread, errwrite,
1354 restore_signals, start_new_session):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001355 """Execute program (POSIX version)"""
1356
Victor Stinner7b3b20a2011-03-03 12:54:05 +00001357 if isinstance(args, (str, bytes)):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001358 args = [args]
Thomas Wouters89f507f2006-12-13 04:49:30 +00001359 else:
1360 args = list(args)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001361
1362 if shell:
1363 args = ["/bin/sh", "-c"] + args
Stefan Krah9542cc62010-07-19 14:20:53 +00001364 if executable:
1365 args[0] = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001366
Peter Astrandd38ddf42005-02-10 08:32:50 +00001367 if executable is None:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001368 executable = args[0]
Gregory P. Smith5591b022012-10-10 03:34:47 -07001369 orig_executable = executable
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001370
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001371 # For transferring possible exec failure from child to parent.
1372 # Data format: "exception name:hex errno:description"
1373 # Pickle is not used; it is complex and involves memory allocation.
Victor Stinnerdaf45552013-08-28 00:53:59 +02001374 errpipe_read, errpipe_write = os.pipe()
Gregory P. Smith53dd8162013-12-01 16:03:24 -08001375 # errpipe_write must not be in the standard io 0, 1, or 2 fd range.
1376 low_fds_to_close = []
1377 while errpipe_write < 3:
1378 low_fds_to_close.append(errpipe_write)
1379 errpipe_write = os.dup(errpipe_write)
1380 for low_fd in low_fds_to_close:
1381 os.close(low_fd)
Christian Heimesfdab48e2008-01-20 09:06:41 +00001382 try:
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001383 try:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001384 # We must avoid complex work that could involve
1385 # malloc or free in the child process to avoid
1386 # potential deadlocks, thus we do all this here.
1387 # and pass it to fork_exec()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001388
Victor Stinner372b8382011-06-21 17:24:21 +02001389 if env is not None:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001390 env_list = [os.fsencode(k) + b'=' + os.fsencode(v)
1391 for k, v in env.items()]
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001392 else:
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001393 env_list = None # Use execv instead of execve.
1394 executable = os.fsencode(executable)
1395 if os.path.dirname(executable):
1396 executable_list = (executable,)
1397 else:
1398 # This matches the behavior of os._execvpe().
1399 executable_list = tuple(
1400 os.path.join(os.fsencode(dir), executable)
1401 for dir in os.get_exec_path(env))
Gregory P. Smith361e30c2013-12-01 00:12:24 -08001402 fds_to_keep = set(pass_fds)
Gregory P. Smith59fd1bf2011-05-28 09:32:39 -07001403 fds_to_keep.add(errpipe_write)
1404 self.pid = _posixsubprocess.fork_exec(
1405 args, executable_list,
1406 close_fds, sorted(fds_to_keep), cwd, env_list,
1407 p2cread, p2cwrite, c2pread, c2pwrite,
1408 errread, errwrite,
1409 errpipe_read, errpipe_write,
1410 restore_signals, start_new_session, preexec_fn)
Charles-François Natali558639f2011-08-18 19:11:29 +02001411 self._child_created = True
Facundo Batista10706e22009-06-19 20:34:30 +00001412 finally:
1413 # be sure the FD is closed no matter what
1414 os.close(errpipe_write)
1415
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001416 # self._devnull is not always defined.
1417 devnull_fd = getattr(self, '_devnull', None)
1418 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001419 os.close(p2cread)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001420 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001421 os.close(c2pwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001422 if errwrite != -1 and errread != -1 and errwrite != devnull_fd:
Facundo Batista10706e22009-06-19 20:34:30 +00001423 os.close(errwrite)
Gregory P. Smithb5461b92013-06-15 18:04:26 -07001424 if devnull_fd is not None:
1425 os.close(devnull_fd)
1426 # Prevent a double close of these fds from __init__ on error.
1427 self._closed_child_pipe_fds = True
Facundo Batista10706e22009-06-19 20:34:30 +00001428
1429 # Wait for exec to fail or succeed; possibly raising an
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001430 # exception (limited in size)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001431 errpipe_data = bytearray()
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001432 while True:
1433 part = _eintr_retry_call(os.read, errpipe_read, 50000)
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001434 errpipe_data += part
1435 if not part or len(errpipe_data) > 50000:
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001436 break
Facundo Batista10706e22009-06-19 20:34:30 +00001437 finally:
1438 # be sure the FD is closed no matter what
1439 os.close(errpipe_read)
1440
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001441 if errpipe_data:
Gregory P. Smithe85db2b2010-12-14 14:38:00 +00001442 try:
1443 _eintr_retry_call(os.waitpid, self.pid, 0)
1444 except OSError as e:
1445 if e.errno != errno.ECHILD:
1446 raise
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001447 try:
Gregory P. Smithf44c9da2012-11-10 23:33:17 -08001448 exception_name, hex_errno, err_msg = (
1449 errpipe_data.split(b':', 2))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001450 except ValueError:
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001451 exception_name = b'SubprocessError'
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001452 hex_errno = b'0'
Gregory P. Smith3aee2222012-11-11 00:04:13 -08001453 err_msg = (b'Bad exception data from child: ' +
1454 repr(errpipe_data))
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001455 child_exception_type = getattr(
1456 builtins, exception_name.decode('ascii'),
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001457 SubprocessError)
Victor Stinner4d078042010-04-23 19:28:32 +00001458 err_msg = err_msg.decode(errors="surrogatepass")
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001459 if issubclass(child_exception_type, OSError) and hex_errno:
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001460 errno_num = int(hex_errno, 16)
Gregory P. Smith5591b022012-10-10 03:34:47 -07001461 child_exec_never_called = (err_msg == "noexec")
1462 if child_exec_never_called:
1463 err_msg = ""
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001464 if errno_num != 0:
1465 err_msg = os.strerror(errno_num)
1466 if errno_num == errno.ENOENT:
Gregory P. Smith5591b022012-10-10 03:34:47 -07001467 if child_exec_never_called:
1468 # The error must be from chdir(cwd).
1469 err_msg += ': ' + repr(cwd)
1470 else:
1471 err_msg += ': ' + repr(orig_executable)
Benjamin Petersonb8bc4392010-11-20 18:24:54 +00001472 raise child_exception_type(errno_num, err_msg)
Gregory P. Smithfb94c5f2010-03-14 06:49:55 +00001473 raise child_exception_type(err_msg)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001474
1475
Brett Cannon84df1e62010-05-14 00:33:40 +00001476 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED,
1477 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED,
1478 _WEXITSTATUS=os.WEXITSTATUS):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001479 """All callers to this function MUST hold self._waitpid_lock."""
Brett Cannon84df1e62010-05-14 00:33:40 +00001480 # This method is called (indirectly) by __del__, so it cannot
Serhiy Storchaka72e77612014-02-10 19:20:22 +02001481 # refer to anything outside of its local scope.
Brett Cannon84df1e62010-05-14 00:33:40 +00001482 if _WIFSIGNALED(sts):
1483 self.returncode = -_WTERMSIG(sts)
1484 elif _WIFEXITED(sts):
1485 self.returncode = _WEXITSTATUS(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001486 else:
1487 # Should never happen
Gregory P. Smith8d07c262012-11-10 23:53:47 -08001488 raise SubprocessError("Unknown child exit status!")
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001489
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001490
Brett Cannon84df1e62010-05-14 00:33:40 +00001491 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid,
Andrew Svetlov1d960fe2012-12-24 20:08:53 +02001492 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001493 """Check if child process has terminated. Returns returncode
Brett Cannon84df1e62010-05-14 00:33:40 +00001494 attribute.
1495
1496 This method is called by __del__, so it cannot reference anything
1497 outside of the local scope (nor can any methods it calls).
1498
1499 """
Peter Astrandd38ddf42005-02-10 08:32:50 +00001500 if self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001501 if not self._waitpid_lock.acquire(False):
1502 # Something else is busy calling waitpid. Don't allow two
1503 # at once. We know nothing yet.
1504 return None
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001505 try:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001506 if self.returncode is not None:
1507 return self.returncode # Another thread waited.
Brett Cannon84df1e62010-05-14 00:33:40 +00001508 pid, sts = _waitpid(self.pid, _WNOHANG)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001509 if pid == self.pid:
1510 self._handle_exitstatus(sts)
Andrew Svetlovad28c7f2012-12-18 22:02:39 +02001511 except OSError as e:
Thomas Wouters49fd7fa2006-04-21 10:40:58 +00001512 if _deadstate is not None:
1513 self.returncode = _deadstate
Andrew Svetlov08bab072012-12-24 20:06:35 +02001514 elif e.errno == _ECHILD:
Gregory P. Smith39051712012-09-29 11:40:38 -07001515 # This happens if SIGCLD is set to be ignored or
1516 # waiting for child processes has otherwise been
1517 # disabled for our process. This child is dead, we
1518 # can't get the status.
1519 # http://bugs.python.org/issue15756
1520 self.returncode = 0
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001521 finally:
1522 self._waitpid_lock.release()
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001523 return self.returncode
1524
1525
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001526 def _try_wait(self, wait_flags):
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001527 """All callers to this function MUST hold self._waitpid_lock."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001528 try:
1529 (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags)
1530 except OSError as e:
1531 if e.errno != errno.ECHILD:
1532 raise
1533 # This happens if SIGCLD is set to be ignored or waiting
1534 # for child processes has otherwise been disabled for our
1535 # process. This child is dead, we can't get the status.
1536 pid = self.pid
1537 sts = 0
1538 return (pid, sts)
1539
1540
1541 def wait(self, timeout=None, endtime=None):
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001542 """Wait for child process to terminate. Returns returncode
1543 attribute."""
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001544 if self.returncode is not None:
1545 return self.returncode
Reid Kleckner2b228f02011-03-16 16:57:54 -04001546
1547 # endtime is preferred to timeout. timeout is only used for
1548 # printing.
1549 if endtime is not None or timeout is not None:
1550 if endtime is None:
Victor Stinner949d8c92012-05-30 13:30:32 +02001551 endtime = _time() + timeout
Reid Kleckner2b228f02011-03-16 16:57:54 -04001552 elif timeout is None:
1553 timeout = self._remaining_time(endtime)
1554
1555 if endtime is not None:
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001556 # Enter a busy loop if we have a timeout. This busy loop was
1557 # cribbed from Lib/threading.py in Thread.wait() at r71065.
1558 delay = 0.0005 # 500 us -> initial delay of 1 ms
1559 while True:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001560 if self._waitpid_lock.acquire(False):
1561 try:
1562 if self.returncode is not None:
1563 break # Another thread waited.
1564 (pid, sts) = self._try_wait(os.WNOHANG)
1565 assert pid == self.pid or pid == 0
1566 if pid == self.pid:
1567 self._handle_exitstatus(sts)
1568 break
1569 finally:
1570 self._waitpid_lock.release()
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001571 remaining = self._remaining_time(endtime)
1572 if remaining <= 0:
Reid Kleckner2b228f02011-03-16 16:57:54 -04001573 raise TimeoutExpired(self.args, timeout)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001574 delay = min(delay * 2, remaining, .05)
1575 time.sleep(delay)
Gregory P. Smithf328d792012-11-10 21:06:18 -08001576 else:
1577 while self.returncode is None:
Gregory P. Smithd65ba512014-04-23 00:27:17 -07001578 with self._waitpid_lock:
1579 if self.returncode is not None:
1580 break # Another thread waited.
1581 (pid, sts) = self._try_wait(0)
1582 # Check the pid and loop as waitpid has been known to
1583 # return 0 even without WNOHANG in odd situations.
1584 # http://bugs.python.org/issue14396.
1585 if pid == self.pid:
1586 self._handle_exitstatus(sts)
Fredrik Lundh5b3687d2004-10-12 15:26:28 +00001587 return self.returncode
1588
1589
Reid Kleckner2b228f02011-03-16 16:57:54 -04001590 def _communicate(self, input, endtime, orig_timeout):
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001591 if self.stdin and not self._communication_started:
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001592 # Flush stdio buffer. This might block, if the user has
1593 # been writing to .stdin in an uncontrolled fashion.
1594 self.stdin.flush()
1595 if not input:
1596 self.stdin.close()
1597
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001598 stdout = None
1599 stderr = None
1600
1601 # Only create this mapping if we haven't already.
1602 if not self._communication_started:
1603 self._fileobj2output = {}
1604 if self.stdout:
1605 self._fileobj2output[self.stdout] = []
1606 if self.stderr:
1607 self._fileobj2output[self.stderr] = []
1608
1609 if self.stdout:
1610 stdout = self._fileobj2output[self.stdout]
1611 if self.stderr:
1612 stderr = self._fileobj2output[self.stderr]
1613
1614 self._save_input(input)
1615
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001616 if self._input:
1617 input_view = memoryview(self._input)
1618
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001619 with _PopenSelector() as selector:
1620 if self.stdin and input:
1621 selector.register(self.stdin, selectors.EVENT_WRITE)
1622 if self.stdout:
1623 selector.register(self.stdout, selectors.EVENT_READ)
1624 if self.stderr:
1625 selector.register(self.stderr, selectors.EVENT_READ)
1626
1627 while selector.get_map():
1628 timeout = self._remaining_time(endtime)
1629 if timeout is not None and timeout < 0:
1630 raise TimeoutExpired(self.args, orig_timeout)
1631
1632 ready = selector.select(timeout)
1633 self._check_timeout(endtime, orig_timeout)
1634
1635 # XXX Rewrite these to use non-blocking I/O on the file
1636 # objects; they are no longer using C stdio!
1637
1638 for key, events in ready:
1639 if key.fileobj is self.stdin:
Gregory P. Smith5ca129b2013-12-07 19:14:59 -08001640 chunk = input_view[self._input_offset :
1641 self._input_offset + _PIPE_BUF]
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001642 try:
1643 self._input_offset += os.write(key.fd, chunk)
1644 except OSError as e:
1645 if e.errno == errno.EPIPE:
1646 selector.unregister(key.fileobj)
1647 key.fileobj.close()
1648 else:
1649 raise
1650 else:
1651 if self._input_offset >= len(self._input):
1652 selector.unregister(key.fileobj)
1653 key.fileobj.close()
1654 elif key.fileobj in (self.stdout, self.stderr):
Gregory P. Smith7b83b182013-12-08 10:58:28 -08001655 data = os.read(key.fd, 32768)
Charles-François Natali3a4586a2013-11-08 19:56:59 +01001656 if not data:
1657 selector.unregister(key.fileobj)
1658 key.fileobj.close()
1659 self._fileobj2output[key.fileobj].append(data)
Reid Kleckner31aa7dd2011-03-14 12:02:10 -04001660
1661 self.wait(timeout=self._remaining_time(endtime))
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001662
1663 # All data exchanged. Translate lists into strings.
1664 if stdout is not None:
1665 stdout = b''.join(stdout)
1666 if stderr is not None:
1667 stderr = b''.join(stderr)
1668
1669 # Translate newlines, if requested.
1670 # This also turns bytes into strings.
1671 if self.universal_newlines:
1672 if stdout is not None:
1673 stdout = self._translate_newlines(stdout,
1674 self.stdout.encoding)
1675 if stderr is not None:
1676 stderr = self._translate_newlines(stderr,
1677 self.stderr.encoding)
1678
Gregory P. Smithd06fa472009-07-04 02:46:54 +00001679 return (stdout, stderr)
1680
1681
Andrew Svetlovaa0dbdc2012-08-14 18:40:21 +03001682 def _save_input(self, input):
1683 # This method is called from the _communicate_with_*() methods
1684 # so that if we time out while communicating, we can continue
1685 # sending input if we retry.
1686 if self.stdin and self._input is None:
1687 self._input_offset = 0
1688 self._input = input
1689 if self.universal_newlines and input is not None:
1690 self._input = self._input.encode(self.stdin.encoding)
1691
1692
Christian Heimesa342c012008-04-20 21:01:16 +00001693 def send_signal(self, sig):
1694 """Send a signal to the process
1695 """
1696 os.kill(self.pid, sig)
1697
1698 def terminate(self):
1699 """Terminate the process with SIGTERM
1700 """
1701 self.send_signal(signal.SIGTERM)
1702
1703 def kill(self):
1704 """Kill the process with SIGKILL
1705 """
1706 self.send_signal(signal.SIGKILL)