Mercurial > cpython-lru_cache-weakref
annotate Lib/subprocess.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 2df5e1f537b0 |
| children |
| rev | line source |
|---|---|
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1 # subprocess - Subprocesses with accessible I/O streams |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
2 # |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
3 # For more information about this module, see PEP 324. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
4 # |
|
35633
45aaa436b945
Changed license header: Now simply referring to PSF. This closes bug
Peter Astrand <astrand@lysator.liu.se>
parents:
34818
diff
changeset
|
5 # Copyright (c) 2003-2005 by Peter Astrand <astrand@lysator.liu.se> |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
6 # |
|
34587
e9ec2ce340fd
Added copyright notice:
Peter Astrand <astrand@lysator.liu.se>
parents:
34575
diff
changeset
|
7 # Licensed to PSF under a Contributor Agreement. |
|
35633
45aaa436b945
Changed license header: Now simply referring to PSF. This closes bug
Peter Astrand <astrand@lysator.liu.se>
parents:
34818
diff
changeset
|
8 # See http://www.python.org/2.4/license for licensing details. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
9 |
|
33776
c5d951a0e0c3
Fix docstring formatting of escape sequences.
Raymond Hettinger <python@rcn.com>
parents:
33770
diff
changeset
|
10 r"""subprocess - Subprocesses with accessible I/O streams |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
11 |
|
33770
c6aac03474c5
return codes are available on all platforms, not just on Unix
Fredrik Lundh <fredrik@pythonware.com>
parents:
33751
diff
changeset
|
12 This module allows you to spawn processes, connect to their |
|
c6aac03474c5
return codes are available on all platforms, not just on Unix
Fredrik Lundh <fredrik@pythonware.com>
parents:
33751
diff
changeset
|
13 input/output/error pipes, and obtain their return codes. This module |
|
c6aac03474c5
return codes are available on all platforms, not just on Unix
Fredrik Lundh <fredrik@pythonware.com>
parents:
33751
diff
changeset
|
14 intends to replace several other, older modules and functions, like: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
15 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
16 os.system |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
17 os.spawn* |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
18 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
19 Information about how the subprocess module can be used to replace these |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
20 modules and functions can be found below. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
21 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
22 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
23 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
24 Using the subprocess module |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
25 =========================== |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
26 This module defines one class called Popen: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
27 |
|
82916
3ecf709dfe69
Fixes issue #17488: Change the subprocess.Popen bufsize parameter default value
Gregory P. Smith <greg@krypto.org>
parents:
82852
diff
changeset
|
28 class Popen(args, bufsize=-1, executable=None, |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
29 stdin=None, stdout=None, stderr=None, |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
30 preexec_fn=None, close_fds=True, shell=False, |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
31 cwd=None, env=None, universal_newlines=False, |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
32 startupinfo=None, creationflags=0, |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
33 restore_signals=True, start_new_session=False, pass_fds=()): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
34 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
35 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
36 Arguments are: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
37 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
38 args should be a string, or a sequence of program arguments. The |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
39 program to execute is normally the first item in the args sequence or |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
40 string, but can be explicitly set by using the executable argument. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
41 |
|
66867
eab8f91f5754
Get rid of the close_fds DeprecationWarning. Changes the default on a per
Gregory P. Smith <greg@mad-scientist.com>
parents:
66723
diff
changeset
|
42 On POSIX, with shell=False (default): In this case, the Popen class |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
43 uses os.execvp() to execute the child program. args should normally |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
44 be a sequence. A string will be treated as a sequence with the string |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
45 as the only item (the program to execute). |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
46 |
|
66867
eab8f91f5754
Get rid of the close_fds DeprecationWarning. Changes the default on a per
Gregory P. Smith <greg@mad-scientist.com>
parents:
66723
diff
changeset
|
47 On POSIX, with shell=True: If args is a string, it specifies the |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
48 command string to execute through the shell. If args is a sequence, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
49 the first item specifies the command string, and any additional items |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
50 will be treated as additional shell arguments. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
51 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
52 On Windows: the Popen class uses CreateProcess() to execute the child |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
53 program, which operates on strings. If args is a sequence, it will be |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
54 converted to a string using the list2cmdline method. Please note that |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
55 not all MS Windows applications interpret the command line the same |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
56 way: The list2cmdline is designed for applications using the same |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
57 rules as the MS C runtime. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
58 |
|
82916
3ecf709dfe69
Fixes issue #17488: Change the subprocess.Popen bufsize parameter default value
Gregory P. Smith <greg@krypto.org>
parents:
82852
diff
changeset
|
59 bufsize will be supplied as the corresponding argument to the io.open() |
|
3ecf709dfe69
Fixes issue #17488: Change the subprocess.Popen bufsize parameter default value
Gregory P. Smith <greg@krypto.org>
parents:
82852
diff
changeset
|
60 function when creating the stdin/stdout/stderr pipe file objects: |
|
3ecf709dfe69
Fixes issue #17488: Change the subprocess.Popen bufsize parameter default value
Gregory P. Smith <greg@krypto.org>
parents:
82852
diff
changeset
|
61 0 means unbuffered (read & write are one system call and can return short), |
|
3ecf709dfe69
Fixes issue #17488: Change the subprocess.Popen bufsize parameter default value
Gregory P. Smith <greg@krypto.org>
parents:
82852
diff
changeset
|
62 1 means line buffered, any other positive value means use a buffer of |
|
3ecf709dfe69
Fixes issue #17488: Change the subprocess.Popen bufsize parameter default value
Gregory P. Smith <greg@krypto.org>
parents:
82852
diff
changeset
|
63 approximately that size. A negative bufsize, the default, means the system |
|
3ecf709dfe69
Fixes issue #17488: Change the subprocess.Popen bufsize parameter default value
Gregory P. Smith <greg@krypto.org>
parents:
82852
diff
changeset
|
64 default of io.DEFAULT_BUFFER_SIZE will be used. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
65 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
66 stdin, stdout and stderr specify the executed programs' standard |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
67 input, standard output and standard error file handles, respectively. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
68 Valid values are PIPE, an existing file descriptor (a positive |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
69 integer), an existing file object, and None. PIPE indicates that a |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
70 new pipe to the child should be created. With None, no redirection |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
71 will occur; the child's file handles will be inherited from the |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
72 parent. Additionally, stderr can be STDOUT, which indicates that the |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
73 stderr data from the applications should be captured into the same |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
74 file handle as for stdout. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
75 |
|
66867
eab8f91f5754
Get rid of the close_fds DeprecationWarning. Changes the default on a per
Gregory P. Smith <greg@mad-scientist.com>
parents:
66723
diff
changeset
|
76 On POSIX, if preexec_fn is set to a callable object, this object will be |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
77 called in the child process just before the child is executed. The use |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
78 of preexec_fn is not thread safe, using it in the presence of threads |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
79 could lead to a deadlock in the child process before the new executable |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
80 is executed. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
81 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
82 If close_fds is true, all file descriptors except 0, 1 and 2 will be |
|
66867
eab8f91f5754
Get rid of the close_fds DeprecationWarning. Changes the default on a per
Gregory P. Smith <greg@mad-scientist.com>
parents:
66723
diff
changeset
|
83 closed before the child process is executed. The default for close_fds |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
84 varies by platform: Always true on POSIX. True when stdin/stdout/stderr |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
85 are None on Windows, false otherwise. |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
86 |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
87 pass_fds is an optional sequence of file descriptors to keep open between the |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
88 parent and child. Providing any pass_fds implicitly sets close_fds to true. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
89 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
90 if shell is true, the specified command will be executed through the |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
91 shell. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
92 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
93 If cwd is not None, the current directory will be changed to cwd |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
94 before the child is executed. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
95 |
|
66867
eab8f91f5754
Get rid of the close_fds DeprecationWarning. Changes the default on a per
Gregory P. Smith <greg@mad-scientist.com>
parents:
66723
diff
changeset
|
96 On POSIX, if restore_signals is True all signals that Python sets to |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
97 SIG_IGN are restored to SIG_DFL in the child process before the exec. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
98 Currently this includes the SIGPIPE, SIGXFZ and SIGXFSZ signals. This |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
99 parameter does nothing on Windows. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
100 |
|
66867
eab8f91f5754
Get rid of the close_fds DeprecationWarning. Changes the default on a per
Gregory P. Smith <greg@mad-scientist.com>
parents:
66723
diff
changeset
|
101 On POSIX, if start_new_session is True, the setsid() system call will be made |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
102 in the child process prior to executing the command. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
103 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
104 If env is not None, it defines the environment variables for the new |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
105 process. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
106 |
|
84476
f4747e1ce2b1
Cleanup of documentation change from #17860
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
84160
diff
changeset
|
107 If universal_newlines is false, the file objects stdin, stdout and stderr |
|
f4747e1ce2b1
Cleanup of documentation change from #17860
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
84160
diff
changeset
|
108 are opened as binary files, and no line ending conversion is done. |
|
f4747e1ce2b1
Cleanup of documentation change from #17860
Ronald Oussoren <ronaldoussoren@mac.com>
parents:
84160
diff
changeset
|
109 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
110 If universal_newlines is true, the file objects stdout and stderr are |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
111 opened as a text files, but lines may be terminated by any of '\n', |
|
66867
eab8f91f5754
Get rid of the close_fds DeprecationWarning. Changes the default on a per
Gregory P. Smith <greg@mad-scientist.com>
parents:
66723
diff
changeset
|
112 the Unix end-of-line convention, '\r', the old Macintosh convention or |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
113 '\r\n', the Windows convention. All of these external representations |
|
82852
72056f06632f
remove the long obsolete mention of universal newlines mode only being
Gregory P. Smith <greg@krypto.org>
parents:
81997
diff
changeset
|
114 are seen as '\n' by the Python program. Also, the newlines attribute |
|
72056f06632f
remove the long obsolete mention of universal newlines mode only being
Gregory P. Smith <greg@krypto.org>
parents:
81997
diff
changeset
|
115 of the file objects stdout, stdin and stderr are not updated by the |
|
72056f06632f
remove the long obsolete mention of universal newlines mode only being
Gregory P. Smith <greg@krypto.org>
parents:
81997
diff
changeset
|
116 communicate() method. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
117 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
118 The startupinfo and creationflags, if given, will be passed to the |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
119 underlying CreateProcess() function. They can specify things such as |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
120 appearance of the main window and priority for the new process. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
121 (Windows only) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
122 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
123 |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
124 This module also defines some shortcut functions: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
125 |
|
34111
73b09c2b788b
Changed signature of call function to avoid confusion: this 'args' is not the same as the one to the Popen constructor
Peter Astrand <astrand@lysator.liu.se>
parents:
34052
diff
changeset
|
126 call(*popenargs, **kwargs): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
127 Run command with arguments. Wait for command to complete, then |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
128 return the returncode attribute. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
129 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
130 The arguments are the same as for the Popen constructor. Example: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
131 |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59207
diff
changeset
|
132 >>> retcode = subprocess.call(["ls", "-l"]) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
133 |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
134 check_call(*popenargs, **kwargs): |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
135 Run command with arguments. Wait for command to complete. If the |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
136 exit code was zero then return, otherwise raise |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
137 CalledProcessError. The CalledProcessError object will have the |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
138 return code in the returncode attribute. |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
139 |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
140 The arguments are the same as for the Popen constructor. Example: |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
141 |
|
59471
ac80884ddcc3
Merged revisions 78736,78759,78761,78767,78788-78789 via svnmerge from
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59207
diff
changeset
|
142 >>> subprocess.check_call(["ls", "-l"]) |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
143 0 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
144 |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
145 getstatusoutput(cmd): |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
146 Return (status, output) of executing cmd in a shell. |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
147 |
|
86941
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
148 Execute the string 'cmd' in a shell with 'check_output' and |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
149 return a 2-tuple (status, output). Universal newlines mode is used, |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
150 meaning that the result with be decoded to a string. |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
151 |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
152 A trailing newline is stripped from the output. |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
153 The exit status for the command can be interpreted |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
154 according to the rules for the function 'wait'. Example: |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
155 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
156 >>> subprocess.getstatusoutput('ls /bin/ls') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
157 (0, '/bin/ls') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
158 >>> subprocess.getstatusoutput('cat /bin/junk') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
159 (256, 'cat: /bin/junk: No such file or directory') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
160 >>> subprocess.getstatusoutput('/bin/junk') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
161 (256, 'sh: /bin/junk: not found') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
162 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
163 getoutput(cmd): |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
164 Return output (stdout or stderr) of executing cmd in a shell. |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
165 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
166 Like getstatusoutput(), except the exit status is ignored and the return |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
167 value is a string containing the command's output. Example: |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
168 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
169 >>> subprocess.getoutput('ls /bin/ls') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
170 '/bin/ls' |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
171 |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
172 check_output(*popenargs, **kwargs): |
|
82831
993b7e0eb8be
Use a larger amount of data for tests such as the interrupted_write
Gregory P. Smith <greg@krypto.org>
parents:
81998
diff
changeset
|
173 Run command with arguments and return its output. |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
174 |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
175 If the exit code was non-zero it raises a CalledProcessError. The |
|
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
176 CalledProcessError object will have the return code in the returncode |
|
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
177 attribute and output in the output attribute. |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
178 |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
179 The arguments are the same as for the Popen constructor. Example: |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
180 |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
181 >>> output = subprocess.check_output(["ls", "-l", "/dev/null"]) |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
182 |
|
83495
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
183 There is an additional optional argument, "input", allowing you to |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
184 pass a string to the subprocess's stdin. If you use this argument |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
185 you may not also use the Popen constructor's "stdin" argument. |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
186 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
187 Exceptions |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
188 ---------- |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
189 Exceptions raised in the child process, before the new program has |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
190 started to execute, will be re-raised in the parent. Additionally, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
191 the exception object will have one extra attribute called |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
192 'child_traceback', which is a string containing traceback information |
|
85221
e07f104133d5
#18705: fix a number of typos. Patch by Févry Thibault.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
84476
diff
changeset
|
193 from the child's point of view. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
194 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
195 The most common exception raised is OSError. This occurs, for |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
196 example, when trying to execute a non-existent file. Applications |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
197 should prepare for OSErrors. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
198 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
199 A ValueError will be raised if Popen is called with invalid arguments. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
200 |
|
68463
d674b557600c
Add a SubprocessError base class for exceptions in the subprocess module.
Gregory P. Smith <greg@krypto.org>
parents:
68454
diff
changeset
|
201 Exceptions defined within this module inherit from SubprocessError. |
|
d674b557600c
Add a SubprocessError base class for exceptions in the subprocess module.
Gregory P. Smith <greg@krypto.org>
parents:
68454
diff
changeset
|
202 check_call() and check_output() will raise CalledProcessError if the |
| 68465 | 203 called process returns a non-zero return code. TimeoutExpired |
|
68463
d674b557600c
Add a SubprocessError base class for exceptions in the subprocess module.
Gregory P. Smith <greg@krypto.org>
parents:
68454
diff
changeset
|
204 be raised if a timeout was specified and expired. |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
205 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
206 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
207 Security |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
208 -------- |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
209 Unlike some other popen functions, this implementation will never call |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
210 /bin/sh implicitly. This means that all characters, including shell |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
211 metacharacters, can safely be passed to child processes. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
212 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
213 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
214 Popen objects |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
215 ============= |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
216 Instances of the Popen class have the following methods: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
217 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
218 poll() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
219 Check if child process has terminated. Returns returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
220 attribute. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
221 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
222 wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
223 Wait for child process to terminate. Returns returncode attribute. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
224 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
225 communicate(input=None) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
226 Interact with process: Send data to stdin. Read data from stdout |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
227 and stderr, until end-of-file is reached. Wait for process to |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
228 terminate. The optional input argument should be a string to be |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
229 sent to the child process, or None, if no data should be sent to |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
230 the child. |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
231 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
232 communicate() returns a tuple (stdout, stderr). |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
233 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
234 Note: The data read is buffered in memory, so do not use this |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
235 method if the data size is large or unlimited. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
236 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
237 The following attributes are also available: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
238 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
239 stdin |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
240 If the stdin argument is PIPE, this attribute is a file object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
241 that provides input to the child process. Otherwise, it is None. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
242 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
243 stdout |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
244 If the stdout argument is PIPE, this attribute is a file object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
245 that provides output from the child process. Otherwise, it is |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
246 None. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
247 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
248 stderr |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
249 If the stderr argument is PIPE, this attribute is file object that |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
250 provides error output from the child process. Otherwise, it is |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
251 None. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
252 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
253 pid |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
254 The process ID of the child process. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
255 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
256 returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
257 The child return code. A None value indicates that the process |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
258 hasn't terminated yet. A negative value -N indicates that the |
|
66867
eab8f91f5754
Get rid of the close_fds DeprecationWarning. Changes the default on a per
Gregory P. Smith <greg@mad-scientist.com>
parents:
66723
diff
changeset
|
259 child was terminated by signal N (POSIX only). |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
260 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
261 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
262 Replacing older functions with the subprocess module |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
263 ==================================================== |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
264 In this section, "a ==> b" means that b can be used as a replacement |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
265 for a. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
266 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
267 Note: All functions in this section fail (more or less) silently if |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
268 the executed program cannot be found; this module raises an OSError |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
269 exception. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
270 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
271 In the following examples, we assume that the subprocess module is |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
272 imported with "from subprocess import *". |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
273 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
274 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
275 Replacing /bin/sh shell backquote |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
276 --------------------------------- |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
277 output=`mycmd myarg` |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
278 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
279 output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
280 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
281 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
282 Replacing shell pipe line |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
283 ------------------------- |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
284 output=`dmesg | grep hda` |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
285 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
286 p1 = Popen(["dmesg"], stdout=PIPE) |
|
34050
fd1be494c31b
Corrected example for replacing shell pipeline. Fixes bug 1073790.
Peter Astrand <astrand@lysator.liu.se>
parents:
33929
diff
changeset
|
287 p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
288 output = p2.communicate()[0] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
289 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
290 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
291 Replacing os.system() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
292 --------------------- |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
293 sts = os.system("mycmd" + " myarg") |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
294 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
295 p = Popen("mycmd" + " myarg", shell=True) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
296 pid, sts = os.waitpid(p.pid, 0) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
297 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
298 Note: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
299 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
300 * Calling the program through the shell is usually not required. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
301 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
302 * It's easier to look at the returncode attribute than the |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
303 exitstatus. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
304 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
305 A more real-world example would look like this: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
306 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
307 try: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
308 retcode = call("mycmd" + " myarg", shell=True) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
309 if retcode < 0: |
|
41843
1f7891d84d93
Remove native popen() and fdopen(), replacing them with subprocess calls.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
310 print("Child was terminated by signal", -retcode, file=sys.stderr) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
311 else: |
|
41843
1f7891d84d93
Remove native popen() and fdopen(), replacing them with subprocess calls.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
312 print("Child returned", retcode, file=sys.stderr) |
|
1f7891d84d93
Remove native popen() and fdopen(), replacing them with subprocess calls.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
313 except OSError as e: |
|
1f7891d84d93
Remove native popen() and fdopen(), replacing them with subprocess calls.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
314 print("Execution failed:", e, file=sys.stderr) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
315 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
316 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
317 Replacing os.spawn* |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
318 ------------------- |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
319 P_NOWAIT example: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
320 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
321 pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg") |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
322 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
323 pid = Popen(["/bin/mycmd", "myarg"]).pid |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
324 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
325 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
326 P_WAIT example: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
327 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
328 retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg") |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
329 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
330 retcode = call(["/bin/mycmd", "myarg"]) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
331 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
332 |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
333 Vector example: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
334 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
335 os.spawnvp(os.P_NOWAIT, path, args) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
336 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
337 Popen([path] + args[1:]) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
338 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
339 |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
340 Environment example: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
341 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
342 os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
343 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
344 Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"}) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
345 """ |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
346 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
347 import sys |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
348 mswindows = (sys.platform == "win32") |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
349 |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
350 import io |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
351 import os |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
352 import time |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
353 import traceback |
|
44810
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
354 import gc |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
355 import signal |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
356 import builtins |
|
66676
b37da60c9072
issue7213 + issue2320: Cause a DeprecationWarning if the close_fds argument is
Gregory P. Smith <greg@mad-scientist.com>
parents:
66622
diff
changeset
|
357 import warnings |
|
69154
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68679
diff
changeset
|
358 import errno |
|
77243
1345cf58738d
Close #14690: Use monotonic clock instead of system clock in the sched,
Victor Stinner <victor.stinner@gmail.com>
parents:
77154
diff
changeset
|
359 try: |
|
1345cf58738d
Close #14690: Use monotonic clock instead of system clock in the sched,
Victor Stinner <victor.stinner@gmail.com>
parents:
77154
diff
changeset
|
360 from time import monotonic as _time |
|
1345cf58738d
Close #14690: Use monotonic clock instead of system clock in the sched,
Victor Stinner <victor.stinner@gmail.com>
parents:
77154
diff
changeset
|
361 except ImportError: |
|
1345cf58738d
Close #14690: Use monotonic clock instead of system clock in the sched,
Victor Stinner <victor.stinner@gmail.com>
parents:
77154
diff
changeset
|
362 from time import time as _time |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
363 |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
364 # Exception classes used by this module. |
|
68463
d674b557600c
Add a SubprocessError base class for exceptions in the subprocess module.
Gregory P. Smith <greg@krypto.org>
parents:
68454
diff
changeset
|
365 class SubprocessError(Exception): pass |
|
d674b557600c
Add a SubprocessError base class for exceptions in the subprocess module.
Gregory P. Smith <greg@krypto.org>
parents:
68454
diff
changeset
|
366 |
|
d674b557600c
Add a SubprocessError base class for exceptions in the subprocess module.
Gregory P. Smith <greg@krypto.org>
parents:
68454
diff
changeset
|
367 |
|
d674b557600c
Add a SubprocessError base class for exceptions in the subprocess module.
Gregory P. Smith <greg@krypto.org>
parents:
68454
diff
changeset
|
368 class CalledProcessError(SubprocessError): |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
369 """This exception is raised when a process run by check_call() or |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
370 check_output() returns a non-zero exit status. |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
371 The exit status will be stored in the returncode attribute; |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
372 check_output() will also store the output in the output attribute. |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
373 """ |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
374 def __init__(self, returncode, cmd, output=None): |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
375 self.returncode = returncode |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
376 self.cmd = cmd |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
377 self.output = output |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
378 def __str__(self): |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
379 return "Command '%s' returned non-zero exit status %d" % (self.cmd, self.returncode) |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
380 |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
381 |
|
68463
d674b557600c
Add a SubprocessError base class for exceptions in the subprocess module.
Gregory P. Smith <greg@krypto.org>
parents:
68454
diff
changeset
|
382 class TimeoutExpired(SubprocessError): |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
383 """This exception is raised when the timeout expires while waiting for a |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
384 child process. |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
385 """ |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
386 def __init__(self, cmd, timeout, output=None): |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
387 self.cmd = cmd |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
388 self.timeout = timeout |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
389 self.output = output |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
390 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
391 def __str__(self): |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
392 return ("Command '%s' timed out after %s seconds" % |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
393 (self.cmd, self.timeout)) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
394 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
395 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
396 if mswindows: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
397 import threading |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
398 import msvcrt |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
399 import _winapi |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
400 class STARTUPINFO: |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
401 dwFlags = 0 |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
402 hStdInput = None |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
403 hStdOutput = None |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
404 hStdError = None |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
405 wShowWindow = 0 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
406 else: |
|
87008
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
407 import _posixsubprocess |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
408 import select |
|
87008
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
409 import selectors |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
410 |
|
55626
fb5857f903fe
Merged revisions 73917 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55617
diff
changeset
|
411 # When select or poll has indicated that the file is writable, |
|
fb5857f903fe
Merged revisions 73917 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55617
diff
changeset
|
412 # we can write up to _PIPE_BUF bytes without risk of blocking. |
|
fb5857f903fe
Merged revisions 73917 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55617
diff
changeset
|
413 # POSIX defines PIPE_BUF as >= 512. |
|
fb5857f903fe
Merged revisions 73917 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55617
diff
changeset
|
414 _PIPE_BUF = getattr(select, 'PIPE_BUF', 512) |
|
fb5857f903fe
Merged revisions 73917 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55617
diff
changeset
|
415 |
|
87008
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
416 # poll/select have the advantage of not requiring any extra file |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
417 # descriptor, contrarily to epoll/kqueue (also, they require a single |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
418 # syscall). |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
419 if hasattr(selectors, 'PollSelector'): |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
420 _PopenSelector = selectors.PollSelector |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
421 else: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
422 _PopenSelector = selectors.SelectSelector |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
423 |
|
55626
fb5857f903fe
Merged revisions 73917 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55617
diff
changeset
|
424 |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
425 __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", |
|
68600
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
426 "getoutput", "check_output", "CalledProcessError", "DEVNULL"] |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
427 |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
428 if mswindows: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
429 from _winapi import (CREATE_NEW_CONSOLE, CREATE_NEW_PROCESS_GROUP, |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
430 STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
431 STD_ERROR_HANDLE, SW_HIDE, |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
432 STARTF_USESTDHANDLES, STARTF_USESHOWWINDOW) |
| 70050 | 433 |
| 69690 | 434 __all__.extend(["CREATE_NEW_CONSOLE", "CREATE_NEW_PROCESS_GROUP", |
|
69689
80971f71b0d9
Further fix #7838. CREATE_NEW_CONSOLE was exposed, but none of the
Brian Curtin <brian@python.org>
parents:
69154
diff
changeset
|
435 "STD_INPUT_HANDLE", "STD_OUTPUT_HANDLE", |
|
80971f71b0d9
Further fix #7838. CREATE_NEW_CONSOLE was exposed, but none of the
Brian Curtin <brian@python.org>
parents:
69154
diff
changeset
|
436 "STD_ERROR_HANDLE", "SW_HIDE", |
|
80971f71b0d9
Further fix #7838. CREATE_NEW_CONSOLE was exposed, but none of the
Brian Curtin <brian@python.org>
parents:
69154
diff
changeset
|
437 "STARTF_USESTDHANDLES", "STARTF_USESHOWWINDOW"]) |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
438 |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
439 class Handle(int): |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
440 closed = False |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
441 |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
442 def Close(self, CloseHandle=_winapi.CloseHandle): |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
443 if not self.closed: |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
444 self.closed = True |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
445 CloseHandle(self) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
446 |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
447 def Detach(self): |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
448 if not self.closed: |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
449 self.closed = True |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
450 return int(self) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
451 raise ValueError("already closed") |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
452 |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
453 def __repr__(self): |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
454 return "Handle(%d)" % int(self) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
455 |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
456 __del__ = Close |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
457 __str__ = __repr__ |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
458 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
459 try: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
460 MAXFD = os.sysconf("SC_OPEN_MAX") |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
461 except: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
462 MAXFD = 256 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
463 |
|
71903
8ca7f109ce79
Issue #12650: Fix a race condition where a subprocess.Popen could leak
Charles-François Natali <neologix@free.fr>
parents:
71524
diff
changeset
|
464 # This lists holds Popen instances for which the underlying process had not |
|
8ca7f109ce79
Issue #12650: Fix a race condition where a subprocess.Popen could leak
Charles-François Natali <neologix@free.fr>
parents:
71524
diff
changeset
|
465 # exited at the time its __del__ method got called: those processes are wait()ed |
|
8ca7f109ce79
Issue #12650: Fix a race condition where a subprocess.Popen could leak
Charles-François Natali <neologix@free.fr>
parents:
71524
diff
changeset
|
466 # for synchronously from _cleanup() when a new Popen object is created, to avoid |
|
8ca7f109ce79
Issue #12650: Fix a race condition where a subprocess.Popen could leak
Charles-François Natali <neologix@free.fr>
parents:
71524
diff
changeset
|
467 # zombie processes. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
468 _active = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
469 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
470 def _cleanup(): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
471 for inst in _active[:]: |
|
48680
7779af388aec
Merged revisions 65459,65472,65481,65518,65536,65581,65609,65637,65641,65644-65645 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48494
diff
changeset
|
472 res = inst._internal_poll(_deadstate=sys.maxsize) |
|
71903
8ca7f109ce79
Issue #12650: Fix a race condition where a subprocess.Popen could leak
Charles-François Natali <neologix@free.fr>
parents:
71524
diff
changeset
|
473 if res is not None: |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
474 try: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
475 _active.remove(inst) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
476 except ValueError: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
477 # This can happen if two threads create a new Popen instance. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
478 # It's harmless that it was already removed, so ignore. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
479 pass |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
480 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
481 PIPE = -1 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
482 STDOUT = -2 |
|
68600
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
483 DEVNULL = -3 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
484 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
485 |
|
59209
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
486 def _eintr_retry_call(func, *args): |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
487 while True: |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
488 try: |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
489 return func(*args) |
|
73085
90f81045613a
Use InterruptedError instead of checking for EINTR
Antoine Pitrou <solipsis@pitrou.net>
parents:
72168
diff
changeset
|
490 except InterruptedError: |
|
90f81045613a
Use InterruptedError instead of checking for EINTR
Antoine Pitrou <solipsis@pitrou.net>
parents:
72168
diff
changeset
|
491 continue |
|
59209
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
492 |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
493 |
|
77036
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
494 # XXX This function is only used by multiprocessing and the test suite, |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
495 # but it's here so that it can be imported when Python is compiled without |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
496 # threads. |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
497 |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
498 def _args_from_interpreter_flags(): |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
499 """Return a list of command-line arguments reproducing the current |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
500 settings in sys.flags and sys.warnoptions.""" |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
501 flag_opt_map = { |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
502 'debug': 'd', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
503 # 'inspect': 'i', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
504 # 'interactive': 'i', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
505 'optimize': 'O', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
506 'dont_write_bytecode': 'B', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
507 'no_user_site': 's', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
508 'no_site': 'S', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
509 'ignore_environment': 'E', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
510 'verbose': 'v', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
511 'bytes_warning': 'b', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
512 'quiet': 'q', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
513 'hash_randomization': 'R', |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
514 } |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
515 args = [] |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
516 for flag, opt in flag_opt_map.items(): |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
517 v = getattr(sys.flags, flag) |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
518 if v > 0: |
|
86425
0ba7280545fe
Close #19284: Handle -R properly in flag helper
Nick Coghlan <ncoghlan@gmail.com>
parents:
85420
diff
changeset
|
519 if flag == 'hash_randomization': |
|
0ba7280545fe
Close #19284: Handle -R properly in flag helper
Nick Coghlan <ncoghlan@gmail.com>
parents:
85420
diff
changeset
|
520 v = 1 # Handle specification of an exact seed |
|
77036
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
521 args.append('-' + opt * v) |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
522 for opt in sys.warnoptions: |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
523 args.append('-W' + opt) |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
524 return args |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
525 |
|
2034b3de1144
Move private function _args_from_interpreter_flags() to subprocess.py, so
Antoine Pitrou <solipsis@pitrou.net>
parents:
76405
diff
changeset
|
526 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
527 def call(*popenargs, timeout=None, **kwargs): |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
528 """Run command with arguments. Wait for command to complete or |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
529 timeout, then return the returncode attribute. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
530 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
531 The arguments are the same as for the Popen constructor. Example: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
532 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
533 retcode = call(["ls", "-l"]) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
534 """ |
|
72168
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
535 with Popen(*popenargs, **kwargs) as p: |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
536 try: |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
537 return p.wait(timeout=timeout) |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
538 except: |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
539 p.kill() |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
540 p.wait() |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
541 raise |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
542 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
543 |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
544 def check_call(*popenargs, **kwargs): |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
545 """Run command with arguments. Wait for command to complete. If |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
546 the exit code was zero then return, otherwise raise |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
547 CalledProcessError. The CalledProcessError object will have the |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
548 return code in the returncode attribute. |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
549 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
550 The arguments are the same as for the call function. Example: |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
551 |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
552 check_call(["ls", "-l"]) |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
553 """ |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
554 retcode = call(*popenargs, **kwargs) |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
555 if retcode: |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
556 cmd = kwargs.get("args") |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
557 if cmd is None: |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
558 cmd = popenargs[0] |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
559 raise CalledProcessError(retcode, cmd) |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
560 return 0 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
561 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
562 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
563 def check_output(*popenargs, timeout=None, **kwargs): |
|
82831
993b7e0eb8be
Use a larger amount of data for tests such as the interrupted_write
Gregory P. Smith <greg@krypto.org>
parents:
81998
diff
changeset
|
564 r"""Run command with arguments and return its output. |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
565 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
566 If the exit code was non-zero it raises a CalledProcessError. The |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
567 CalledProcessError object will have the return code in the returncode |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
568 attribute and output in the output attribute. |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
569 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
570 The arguments are the same as for the Popen constructor. Example: |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
571 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
572 >>> check_output(["ls", "-l", "/dev/null"]) |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
573 b'crw-rw-rw- 1 root root 1, 3 Oct 18 2007 /dev/null\n' |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
574 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
575 The stdout argument is not allowed as it is used internally. |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
576 To capture standard error in the result, use stderr=STDOUT. |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
577 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
578 >>> check_output(["/bin/sh", "-c", |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
579 ... "ls -l non_existent_file ; exit 0"], |
|
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
580 ... stderr=STDOUT) |
|
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
581 b'ls: non_existent_file: No such file or directory\n' |
|
82831
993b7e0eb8be
Use a larger amount of data for tests such as the interrupted_write
Gregory P. Smith <greg@krypto.org>
parents:
81998
diff
changeset
|
582 |
|
83495
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
583 There is an additional optional argument, "input", allowing you to |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
584 pass a string to the subprocess's stdin. If you use this argument |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
585 you may not also use the Popen constructor's "stdin" argument, as |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
586 it too will be used internally. Example: |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
587 |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
588 >>> check_output(["sed", "-e", "s/foo/bar/"], |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
589 ... input=b"when in the course of fooman events\n") |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
590 b'when in the course of barman events\n' |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
591 |
|
82831
993b7e0eb8be
Use a larger amount of data for tests such as the interrupted_write
Gregory P. Smith <greg@krypto.org>
parents:
81998
diff
changeset
|
592 If universal_newlines=True is passed, the return value will be a |
|
993b7e0eb8be
Use a larger amount of data for tests such as the interrupted_write
Gregory P. Smith <greg@krypto.org>
parents:
81998
diff
changeset
|
593 string rather than bytes. |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
594 """ |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
595 if 'stdout' in kwargs: |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
596 raise ValueError('stdout argument not allowed, it will be overridden.') |
|
83495
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
597 if 'input' in kwargs: |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
598 if 'stdin' in kwargs: |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
599 raise ValueError('stdin and input arguments may not both be used.') |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
600 inputdata = kwargs['input'] |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
601 del kwargs['input'] |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
602 kwargs['stdin'] = PIPE |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
603 else: |
|
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
604 inputdata = None |
|
72168
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
605 with Popen(*popenargs, stdout=PIPE, **kwargs) as process: |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
606 try: |
|
83495
5c45d0ca984f
Issue #16624: `subprocess.check_output` now accepts an `input` argument,
Serhiy Storchaka <storchaka@gmail.com>
parents:
82918
diff
changeset
|
607 output, unused_err = process.communicate(inputdata, timeout=timeout) |
|
72168
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
608 except TimeoutExpired: |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
609 process.kill() |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
610 output, unused_err = process.communicate() |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
611 raise TimeoutExpired(process.args, timeout, output=output) |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
612 except: |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
613 process.kill() |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
614 process.wait() |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
615 raise |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
616 retcode = process.poll() |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
617 if retcode: |
|
86b7f14485c9
Issue #12494: Close pipes and kill process on error in subprocess functions
Victor Stinner <victor.stinner@haypocalc.com>
parents:
71909
diff
changeset
|
618 raise CalledProcessError(retcode, process.args, output=output) |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
619 return output |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
620 |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
621 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
622 def list2cmdline(seq): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
623 """ |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
624 Translate a sequence of arguments into a command line |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
625 string, using the same rules as the MS C runtime: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
626 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
627 1) Arguments are delimited by white space, which is either a |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
628 space or a tab. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
629 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
630 2) A string surrounded by double quotation marks is |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
631 interpreted as a single argument, regardless of white space |
|
62404
5de52eb252da
Merged revisions 82076 via svnmerge from
Jean-Paul Calderone <exarkun@divmod.com>
parents:
61585
diff
changeset
|
632 contained within. A quoted string can be embedded in an |
|
5de52eb252da
Merged revisions 82076 via svnmerge from
Jean-Paul Calderone <exarkun@divmod.com>
parents:
61585
diff
changeset
|
633 argument. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
634 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
635 3) A double quotation mark preceded by a backslash is |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
636 interpreted as a literal double quotation mark. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
637 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
638 4) Backslashes are interpreted literally, unless they |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
639 immediately precede a double quotation mark. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
640 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
641 5) If backslashes immediately precede a double quotation mark, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
642 every pair of backslashes is interpreted as a literal |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
643 backslash. If the number of backslashes is odd, the last |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
644 backslash escapes the next double quotation mark as |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
645 described in rule 3. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
646 """ |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
647 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
648 # See |
|
57156
667d9779cad6
Merged revisions 76170 via svnmerge from
Eric Smith <eric@trueblade.com>
parents:
55626
diff
changeset
|
649 # http://msdn.microsoft.com/en-us/library/17w5ykft.aspx |
|
667d9779cad6
Merged revisions 76170 via svnmerge from
Eric Smith <eric@trueblade.com>
parents:
55626
diff
changeset
|
650 # or search http://msdn.microsoft.com for |
|
667d9779cad6
Merged revisions 76170 via svnmerge from
Eric Smith <eric@trueblade.com>
parents:
55626
diff
changeset
|
651 # "Parsing C++ Command-Line Arguments" |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
652 result = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
653 needquote = False |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
654 for arg in seq: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
655 bs_buf = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
656 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
657 # Add a space to separate this argument from the others |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
658 if result: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
659 result.append(' ') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
660 |
|
62404
5de52eb252da
Merged revisions 82076 via svnmerge from
Jean-Paul Calderone <exarkun@divmod.com>
parents:
61585
diff
changeset
|
661 needquote = (" " in arg) or ("\t" in arg) or not arg |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
662 if needquote: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
663 result.append('"') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
664 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
665 for c in arg: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
666 if c == '\\': |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
667 # Don't know if we need to double yet. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
668 bs_buf.append(c) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
669 elif c == '"': |
|
44810
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
670 # Double backslashes. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
671 result.append('\\' * len(bs_buf)*2) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
672 bs_buf = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
673 result.append('\\"') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
674 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
675 # Normal char |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
676 if bs_buf: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
677 result.extend(bs_buf) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
678 bs_buf = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
679 result.append(c) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
680 |
|
44810
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
681 # Add remaining backslashes, if any. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
682 if bs_buf: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
683 result.extend(bs_buf) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
684 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
685 if needquote: |
|
34675
8f0456425715
Corrected bug in list2cmdline wrt backslashes. Fixes #1083306.
Peter Astrand <astrand@lysator.liu.se>
parents:
34672
diff
changeset
|
686 result.extend(bs_buf) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
687 result.append('"') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
688 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
689 return ''.join(result) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
690 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
691 |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
692 # Various tools for executing commands and looking at their output and status. |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
693 # |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
694 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
695 def getstatusoutput(cmd): |
|
86941
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
696 """ Return (status, output) of executing cmd in a shell. |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
697 |
|
86941
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
698 Execute the string 'cmd' in a shell with 'check_output' and |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
699 return a 2-tuple (status, output). Universal newlines mode is used, |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
700 meaning that the result with be decoded to a string. |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
701 |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
702 A trailing newline is stripped from the output. |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
703 The exit status for the command can be interpreted |
|
0aa2aedc6a21
Issue #10197 Tweak docs for subprocess.getstatusoutput and align the documentation, the module docstring, and the function docstring.
Tim Golden <mail@timgolden.me.uk>
parents:
86880
diff
changeset
|
704 according to the rules for the function 'wait'. Example: |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
705 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
706 >>> import subprocess |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
707 >>> subprocess.getstatusoutput('ls /bin/ls') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
708 (0, '/bin/ls') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
709 >>> subprocess.getstatusoutput('cat /bin/junk') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
710 (256, 'cat: /bin/junk: No such file or directory') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
711 >>> subprocess.getstatusoutput('/bin/junk') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
712 (256, 'sh: /bin/junk: not found') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
713 """ |
|
86879
c34e163c0086
Issue #10197 Rework subprocess.get[status]output to use subprocess functionality and thus to work on Windows. Patch by Nick Coghlan.
Tim Golden <mail@timgolden.me.uk>
parents:
85221
diff
changeset
|
714 try: |
|
c34e163c0086
Issue #10197 Rework subprocess.get[status]output to use subprocess functionality and thus to work on Windows. Patch by Nick Coghlan.
Tim Golden <mail@timgolden.me.uk>
parents:
85221
diff
changeset
|
715 data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) |
|
c34e163c0086
Issue #10197 Rework subprocess.get[status]output to use subprocess functionality and thus to work on Windows. Patch by Nick Coghlan.
Tim Golden <mail@timgolden.me.uk>
parents:
85221
diff
changeset
|
716 status = 0 |
|
c34e163c0086
Issue #10197 Rework subprocess.get[status]output to use subprocess functionality and thus to work on Windows. Patch by Nick Coghlan.
Tim Golden <mail@timgolden.me.uk>
parents:
85221
diff
changeset
|
717 except CalledProcessError as ex: |
|
c34e163c0086
Issue #10197 Rework subprocess.get[status]output to use subprocess functionality and thus to work on Windows. Patch by Nick Coghlan.
Tim Golden <mail@timgolden.me.uk>
parents:
85221
diff
changeset
|
718 data = ex.output |
|
c34e163c0086
Issue #10197 Rework subprocess.get[status]output to use subprocess functionality and thus to work on Windows. Patch by Nick Coghlan.
Tim Golden <mail@timgolden.me.uk>
parents:
85221
diff
changeset
|
719 status = ex.returncode |
|
c34e163c0086
Issue #10197 Rework subprocess.get[status]output to use subprocess functionality and thus to work on Windows. Patch by Nick Coghlan.
Tim Golden <mail@timgolden.me.uk>
parents:
85221
diff
changeset
|
720 if data[-1:] == '\n': |
|
c34e163c0086
Issue #10197 Rework subprocess.get[status]output to use subprocess functionality and thus to work on Windows. Patch by Nick Coghlan.
Tim Golden <mail@timgolden.me.uk>
parents:
85221
diff
changeset
|
721 data = data[:-1] |
|
c34e163c0086
Issue #10197 Rework subprocess.get[status]output to use subprocess functionality and thus to work on Windows. Patch by Nick Coghlan.
Tim Golden <mail@timgolden.me.uk>
parents:
85221
diff
changeset
|
722 return status, data |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
723 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
724 def getoutput(cmd): |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
725 """Return output (stdout or stderr) of executing cmd in a shell. |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
726 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
727 Like getstatusoutput(), except the exit status is ignored and the return |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
728 value is a string containing the command's output. Example: |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
729 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
730 >>> import subprocess |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
731 >>> subprocess.getoutput('ls /bin/ls') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
732 '/bin/ls' |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
733 """ |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
734 return getstatusoutput(cmd)[1] |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
735 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
736 |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
737 _PLATFORM_DEFAULT_CLOSE_FDS = object() |
|
66867
eab8f91f5754
Get rid of the close_fds DeprecationWarning. Changes the default on a per
Gregory P. Smith <greg@mad-scientist.com>
parents:
66723
diff
changeset
|
738 |
|
eab8f91f5754
Get rid of the close_fds DeprecationWarning. Changes the default on a per
Gregory P. Smith <greg@mad-scientist.com>
parents:
66723
diff
changeset
|
739 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
740 class Popen(object): |
|
82916
3ecf709dfe69
Fixes issue #17488: Change the subprocess.Popen bufsize parameter default value
Gregory P. Smith <greg@krypto.org>
parents:
82852
diff
changeset
|
741 def __init__(self, args, bufsize=-1, executable=None, |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
742 stdin=None, stdout=None, stderr=None, |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
743 preexec_fn=None, close_fds=_PLATFORM_DEFAULT_CLOSE_FDS, |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
744 shell=False, cwd=None, env=None, universal_newlines=False, |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
745 startupinfo=None, creationflags=0, |
|
66692
296e6f85f56d
issue6559: Adds a pass_fds parameter to subprocess.Popen that allows the caller
Gregory P. Smith <greg@mad-scientist.com>
parents:
66676
diff
changeset
|
746 restore_signals=True, start_new_session=False, |
|
296e6f85f56d
issue6559: Adds a pass_fds parameter to subprocess.Popen that allows the caller
Gregory P. Smith <greg@mad-scientist.com>
parents:
66676
diff
changeset
|
747 pass_fds=()): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
748 """Create new Popen instance.""" |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
749 _cleanup() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
750 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
751 self._child_created = False |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
752 self._input = None |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
753 self._communication_started = False |
|
41984
e420039368b7
The bufsize argument to Popen() should accept None meaning the default (0).
Guido van Rossum <guido@python.org>
parents:
41969
diff
changeset
|
754 if bufsize is None: |
|
82916
3ecf709dfe69
Fixes issue #17488: Change the subprocess.Popen bufsize parameter default value
Gregory P. Smith <greg@krypto.org>
parents:
82852
diff
changeset
|
755 bufsize = -1 # Restore default |
|
41592
1e5a2a2b18ee
Fix various spots where int/long and str/unicode unification
Walter Dörwald <walter@livinglogic.de>
parents:
41554
diff
changeset
|
756 if not isinstance(bufsize, int): |
|
34052
79d2ae0a62ef
Raise TypeError if bufsize argument is not an integer. Patch 1071755, slightly modified.
Peter Astrand <astrand@lysator.liu.se>
parents:
34050
diff
changeset
|
757 raise TypeError("bufsize must be an integer") |
|
79d2ae0a62ef
Raise TypeError if bufsize argument is not an integer. Patch 1071755, slightly modified.
Peter Astrand <astrand@lysator.liu.se>
parents:
34050
diff
changeset
|
758 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
759 if mswindows: |
| 33735 | 760 if preexec_fn is not None: |
| 761 raise ValueError("preexec_fn is not supported on Windows " | |
| 762 "platforms") | |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
763 any_stdio_set = (stdin is not None or stdout is not None or |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
764 stderr is not None) |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
765 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
766 if any_stdio_set: |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
767 close_fds = False |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
768 else: |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
769 close_fds = True |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
770 elif close_fds and any_stdio_set: |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
771 raise ValueError( |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
772 "close_fds is not supported on Windows platforms" |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
773 " if you redirect stdin/stdout/stderr") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
774 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
775 # POSIX |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
776 if close_fds is _PLATFORM_DEFAULT_CLOSE_FDS: |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
777 close_fds = True |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
778 if pass_fds and not close_fds: |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
779 warnings.warn("pass_fds overriding close_fds.", RuntimeWarning) |
|
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
780 close_fds = True |
| 33735 | 781 if startupinfo is not None: |
| 782 raise ValueError("startupinfo is only supported on Windows " | |
| 783 "platforms") | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
784 if creationflags != 0: |
| 33735 | 785 raise ValueError("creationflags is only supported on Windows " |
| 786 "platforms") | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
787 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
788 self.args = args |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
789 self.stdin = None |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
790 self.stdout = None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
791 self.stderr = None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
792 self.pid = None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
793 self.returncode = None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
794 self.universal_newlines = universal_newlines |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
795 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
796 # Input and output objects. The general principle is like |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
797 # this: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
798 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
799 # Parent Child |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
800 # ------ ----- |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
801 # p2cwrite ---stdin---> p2cread |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
802 # c2pread <--stdout--- c2pwrite |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
803 # errread <--stderr--- errwrite |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
804 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
805 # On POSIX, the child objects are file descriptors. On |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
806 # Windows, these are Windows file handles. The parent objects |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
807 # are file descriptors on both platforms. The parent objects |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
808 # are -1 when not using PIPEs. The child objects are -1 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
809 # when not redirecting. |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
810 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
811 (p2cread, p2cwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
812 c2pread, c2pwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
813 errread, errwrite) = self._get_handles(stdin, stdout, stderr) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
814 |
|
67358
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
815 # We wrap OS handles *before* launching the child, otherwise a |
|
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
816 # quickly terminating child could make our fds unwrappable |
|
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
817 # (see #8458). |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
818 |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40775
diff
changeset
|
819 if mswindows: |
|
59619
c45f21705ecb
Fix an oversight in r78946 which causes failure in the subprocess module on Windows.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59613
diff
changeset
|
820 if p2cwrite != -1: |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
821 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) |
|
59619
c45f21705ecb
Fix an oversight in r78946 which causes failure in the subprocess module on Windows.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59613
diff
changeset
|
822 if c2pread != -1: |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
823 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) |
|
59619
c45f21705ecb
Fix an oversight in r78946 which causes failure in the subprocess module on Windows.
Florent Xicluna <florent.xicluna@gmail.com>
parents:
59613
diff
changeset
|
824 if errread != -1: |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
825 errread = msvcrt.open_osfhandle(errread.Detach(), 0) |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40775
diff
changeset
|
826 |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
827 if p2cwrite != -1: |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
828 self.stdin = io.open(p2cwrite, 'wb', bufsize) |
|
78590
65ef6ae39ea3
Cleanup universal_newlines usage for subprocess.Popen, remove unused param.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78572
diff
changeset
|
829 if universal_newlines: |
|
71485
5cc536fbd7c1
Issue #12591: Improve support of "universal newlines" in the subprocess
Antoine Pitrou <solipsis@pitrou.net>
parents:
71228
diff
changeset
|
830 self.stdin = io.TextIOWrapper(self.stdin, write_through=True) |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
831 if c2pread != -1: |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
832 self.stdout = io.open(c2pread, 'rb', bufsize) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
833 if universal_newlines: |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
834 self.stdout = io.TextIOWrapper(self.stdout) |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
835 if errread != -1: |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
836 self.stderr = io.open(errread, 'rb', bufsize) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
837 if universal_newlines: |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
838 self.stderr = io.TextIOWrapper(self.stderr) |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
839 |
|
84160
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
840 self._closed_child_pipe_fds = False |
|
67358
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
841 try: |
|
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
842 self._execute_child(args, executable, preexec_fn, close_fds, |
|
78590
65ef6ae39ea3
Cleanup universal_newlines usage for subprocess.Popen, remove unused param.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78572
diff
changeset
|
843 pass_fds, cwd, env, |
|
67358
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
844 startupinfo, creationflags, shell, |
|
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
845 p2cread, p2cwrite, |
|
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
846 c2pread, c2pwrite, |
|
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
847 errread, errwrite, |
|
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
848 restore_signals, start_new_session) |
|
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
849 except: |
|
80368
63ff4c9a2ed2
Fixes issue #16327: The subprocess module no longer leaks file descriptors
Gregory P. Smith <greg@krypto.org>
parents:
80362
diff
changeset
|
850 # Cleanup if the child failed starting. |
|
63ff4c9a2ed2
Fixes issue #16327: The subprocess module no longer leaks file descriptors
Gregory P. Smith <greg@krypto.org>
parents:
80362
diff
changeset
|
851 for f in filter(None, (self.stdin, self.stdout, self.stderr)): |
|
67358
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
852 try: |
|
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
853 f.close() |
|
80922
061e9a439f54
Get rig of EnvironmentError (#16705)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
80920
diff
changeset
|
854 except OSError: |
|
80368
63ff4c9a2ed2
Fixes issue #16327: The subprocess module no longer leaks file descriptors
Gregory P. Smith <greg@krypto.org>
parents:
80362
diff
changeset
|
855 pass # Ignore EBADF or other errors. |
|
63ff4c9a2ed2
Fixes issue #16327: The subprocess module no longer leaks file descriptors
Gregory P. Smith <greg@krypto.org>
parents:
80362
diff
changeset
|
856 |
|
84160
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
857 if not self._closed_child_pipe_fds: |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
858 to_close = [] |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
859 if stdin == PIPE: |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
860 to_close.append(p2cread) |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
861 if stdout == PIPE: |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
862 to_close.append(c2pwrite) |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
863 if stderr == PIPE: |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
864 to_close.append(errwrite) |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
865 if hasattr(self, '_devnull'): |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
866 to_close.append(self._devnull) |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
867 for fd in to_close: |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
868 try: |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
869 os.close(fd) |
|
84162
7dee56b6ff34
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
diff
changeset
|
870 except OSError: |
|
84160
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
871 pass |
|
80368
63ff4c9a2ed2
Fixes issue #16327: The subprocess module no longer leaks file descriptors
Gregory P. Smith <greg@krypto.org>
parents:
80362
diff
changeset
|
872 |
|
67358
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
873 raise |
|
8af6e8fc0205
In subprocess, wrap pipe fds before launching the child. Hopefully this
Antoine Pitrou <solipsis@pitrou.net>
parents:
67331
diff
changeset
|
874 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
875 |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
876 def _translate_newlines(self, data, encoding): |
|
78655
a0f7c2f79bce
Issue #15595: Fix subprocess.Popen(universal_newlines=True)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
75524
diff
changeset
|
877 data = data.decode(encoding) |
|
a0f7c2f79bce
Issue #15595: Fix subprocess.Popen(universal_newlines=True)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
75524
diff
changeset
|
878 return data.replace("\r\n", "\n").replace("\r", "\n") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
879 |
|
66622
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66309
diff
changeset
|
880 def __enter__(self): |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66309
diff
changeset
|
881 return self |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66309
diff
changeset
|
882 |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66309
diff
changeset
|
883 def __exit__(self, type, value, traceback): |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66309
diff
changeset
|
884 if self.stdout: |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66309
diff
changeset
|
885 self.stdout.close() |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66309
diff
changeset
|
886 if self.stderr: |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66309
diff
changeset
|
887 self.stderr.close() |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66309
diff
changeset
|
888 if self.stdin: |
|
e02021fbfe22
Fix #10554. Added context manager support to Popen objects.
Brian Curtin <brian.curtin@gmail.com>
parents:
66309
diff
changeset
|
889 self.stdin.close() |
|
70049
b00a64a5cb93
merge - 7a3f3ad83676 Fixes Issue #12044.
Gregory P. Smith <greg@krypto.org>
parents:
69690
diff
changeset
|
890 # Wait for the process to terminate, to avoid zombies. |
|
b00a64a5cb93
merge - 7a3f3ad83676 Fixes Issue #12044.
Gregory P. Smith <greg@krypto.org>
parents:
69690
diff
changeset
|
891 self.wait() |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
892 |
| 61569 | 893 def __del__(self, _maxsize=sys.maxsize, _active=_active): |
|
70554
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70050
diff
changeset
|
894 # If __init__ hasn't had a chance to execute (e.g. if it |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70050
diff
changeset
|
895 # was passed an undeclared keyword argument), we don't |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70050
diff
changeset
|
896 # have a _child_created attribute at all. |
|
0f2714e49583
Close #12085: Fix an attribute error in subprocess.Popen destructor if the
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70050
diff
changeset
|
897 if not getattr(self, '_child_created', False): |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
898 # We didn't get to successfully create a child process. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
899 return |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
900 # In case the child hasn't been waited on, check if it's done. |
| 61569 | 901 self._internal_poll(_deadstate=_maxsize) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
902 if self.returncode is None and _active is not None: |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
903 # Child is still running, keep us alive until we can wait on it. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
904 _active.append(self) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
905 |
|
68600
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
906 def _get_devnull(self): |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
907 if not hasattr(self, '_devnull'): |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
908 self._devnull = os.open(os.devnull, os.O_RDWR) |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
909 return self._devnull |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
910 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
911 def communicate(self, input=None, timeout=None): |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
912 """Interact with process: Send data to stdin. Read data from |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
913 stdout and stderr, until end-of-file is reached. Wait for |
|
70289
6354b4ceba1d
Update documentation to mention bytes instead byte string and correct one
Gregory P. Smith <greg@krypto.org>
parents:
70052
diff
changeset
|
914 process to terminate. The optional input argument should be |
|
6354b4ceba1d
Update documentation to mention bytes instead byte string and correct one
Gregory P. Smith <greg@krypto.org>
parents:
70052
diff
changeset
|
915 bytes to be sent to the child process, or None, if no data |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
916 should be sent to the child. |
|
34818
4eaab38566c9
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
34675
diff
changeset
|
917 |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
918 communicate() returns a tuple (stdout, stderr).""" |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
919 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
920 if self._communication_started and input: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
921 raise ValueError("Cannot send input after starting communication") |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
922 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
923 # Optimization: If we are not worried about timeouts, we haven't |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
924 # started communicating, and we have one or zero pipes, using select() |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
925 # or threads is unnecessary. |
|
69152
3664fc29e867
Issue #11757: subprocess ensures that select() and poll() timeout >= 0
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69011
diff
changeset
|
926 if (timeout is None and not self._communication_started and |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
927 [self.stdin, self.stdout, self.stderr].count(None) >= 2): |
|
34818
4eaab38566c9
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
34675
diff
changeset
|
928 stdout = None |
|
4eaab38566c9
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
34675
diff
changeset
|
929 stderr = None |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
930 if self.stdin: |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
931 if input: |
|
69154
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68679
diff
changeset
|
932 try: |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68679
diff
changeset
|
933 self.stdin.write(input) |
|
81039
7d69d04522e3
Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
81021
diff
changeset
|
934 except OSError as e: |
|
69154
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68679
diff
changeset
|
935 if e.errno != errno.EPIPE and e.errno != errno.EINVAL: |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68679
diff
changeset
|
936 raise |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
937 self.stdin.close() |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
938 elif self.stdout: |
|
71228
dcfacc2d93b4
Issue #12493: subprocess: communicate() handles EINTR
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70921
diff
changeset
|
939 stdout = _eintr_retry_call(self.stdout.read) |
|
47557
98827a21e352
Merged revisions 63724,63726,63732,63744,63754-63755,63757-63758,63760,63775,63781-63782,63787,63805-63808,63818-63819,63823-63824 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47331
diff
changeset
|
940 self.stdout.close() |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
941 elif self.stderr: |
|
71228
dcfacc2d93b4
Issue #12493: subprocess: communicate() handles EINTR
Victor Stinner <victor.stinner@haypocalc.com>
parents:
70921
diff
changeset
|
942 stderr = _eintr_retry_call(self.stderr.read) |
|
47557
98827a21e352
Merged revisions 63724,63726,63732,63744,63754-63755,63757-63758,63760,63775,63781-63782,63787,63805-63808,63818-63819,63823-63824 via svnmerge from
Georg Brandl <georg@python.org>
parents:
47331
diff
changeset
|
943 self.stderr.close() |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
944 self.wait() |
|
69152
3664fc29e867
Issue #11757: subprocess ensures that select() and poll() timeout >= 0
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69011
diff
changeset
|
945 else: |
|
3664fc29e867
Issue #11757: subprocess ensures that select() and poll() timeout >= 0
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69011
diff
changeset
|
946 if timeout is not None: |
|
77243
1345cf58738d
Close #14690: Use monotonic clock instead of system clock in the sched,
Victor Stinner <victor.stinner@gmail.com>
parents:
77154
diff
changeset
|
947 endtime = _time() + timeout |
|
69152
3664fc29e867
Issue #11757: subprocess ensures that select() and poll() timeout >= 0
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69011
diff
changeset
|
948 else: |
|
3664fc29e867
Issue #11757: subprocess ensures that select() and poll() timeout >= 0
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69011
diff
changeset
|
949 endtime = None |
|
34818
4eaab38566c9
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
34675
diff
changeset
|
950 |
|
69152
3664fc29e867
Issue #11757: subprocess ensures that select() and poll() timeout >= 0
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69011
diff
changeset
|
951 try: |
|
3664fc29e867
Issue #11757: subprocess ensures that select() and poll() timeout >= 0
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69011
diff
changeset
|
952 stdout, stderr = self._communicate(input, endtime, timeout) |
|
3664fc29e867
Issue #11757: subprocess ensures that select() and poll() timeout >= 0
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69011
diff
changeset
|
953 finally: |
|
3664fc29e867
Issue #11757: subprocess ensures that select() and poll() timeout >= 0
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69011
diff
changeset
|
954 self._communication_started = True |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
955 |
|
69152
3664fc29e867
Issue #11757: subprocess ensures that select() and poll() timeout >= 0
Victor Stinner <victor.stinner@haypocalc.com>
parents:
69011
diff
changeset
|
956 sts = self.wait(timeout=self._remaining_time(endtime)) |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
957 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
958 return (stdout, stderr) |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
959 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
960 |
|
48680
7779af388aec
Merged revisions 65459,65472,65481,65518,65536,65581,65609,65637,65641,65644-65645 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48494
diff
changeset
|
961 def poll(self): |
|
7779af388aec
Merged revisions 65459,65472,65481,65518,65536,65581,65609,65637,65641,65644-65645 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48494
diff
changeset
|
962 return self._internal_poll() |
|
7779af388aec
Merged revisions 65459,65472,65481,65518,65536,65581,65609,65637,65641,65644-65645 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48494
diff
changeset
|
963 |
|
7779af388aec
Merged revisions 65459,65472,65481,65518,65536,65581,65609,65637,65641,65644-65645 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48494
diff
changeset
|
964 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
965 def _remaining_time(self, endtime): |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
966 """Convenience for _communicate when computing timeouts.""" |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
967 if endtime is None: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
968 return None |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
969 else: |
|
77243
1345cf58738d
Close #14690: Use monotonic clock instead of system clock in the sched,
Victor Stinner <victor.stinner@gmail.com>
parents:
77154
diff
changeset
|
970 return endtime - _time() |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
971 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
972 |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
973 def _check_timeout(self, endtime, orig_timeout): |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
974 """Convenience for checking if a timeout has expired.""" |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
975 if endtime is None: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
976 return |
|
77243
1345cf58738d
Close #14690: Use monotonic clock instead of system clock in the sched,
Victor Stinner <victor.stinner@gmail.com>
parents:
77154
diff
changeset
|
977 if _time() > endtime: |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
978 raise TimeoutExpired(self.args, orig_timeout) |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
979 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
980 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
981 if mswindows: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
982 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
983 # Windows methods |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
984 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
985 def _get_handles(self, stdin, stdout, stderr): |
|
55617
a267c604465f
Recorded merge of revisions 74057 via svnmerge from
Georg Brandl <georg@python.org>
parents:
55602
diff
changeset
|
986 """Construct and return tuple with IO objects: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
987 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
988 """ |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
989 if stdin is None and stdout is None and stderr is None: |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
990 return (-1, -1, -1, -1, -1, -1) |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
991 |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
992 p2cread, p2cwrite = -1, -1 |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
993 c2pread, c2pwrite = -1, -1 |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
994 errread, errwrite = -1, -1 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
995 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
996 if stdin is None: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
997 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
998 if p2cread is None: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
999 p2cread, _ = _winapi.CreatePipe(None, 0) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1000 p2cread = Handle(p2cread) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1001 _winapi.CloseHandle(_) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
1002 elif stdin == PIPE: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1003 p2cread, p2cwrite = _winapi.CreatePipe(None, 0) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1004 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite) |
|
68600
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1005 elif stdin == DEVNULL: |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1006 p2cread = msvcrt.get_osfhandle(self._get_devnull()) |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1007 elif isinstance(stdin, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1008 p2cread = msvcrt.get_osfhandle(stdin) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1009 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1010 # Assuming file-like object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1011 p2cread = msvcrt.get_osfhandle(stdin.fileno()) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1012 p2cread = self._make_inheritable(p2cread) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1013 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1014 if stdout is None: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1015 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
1016 if c2pwrite is None: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1017 _, c2pwrite = _winapi.CreatePipe(None, 0) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1018 c2pwrite = Handle(c2pwrite) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1019 _winapi.CloseHandle(_) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
1020 elif stdout == PIPE: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1021 c2pread, c2pwrite = _winapi.CreatePipe(None, 0) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1022 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite) |
|
68600
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1023 elif stdout == DEVNULL: |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1024 c2pwrite = msvcrt.get_osfhandle(self._get_devnull()) |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1025 elif isinstance(stdout, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1026 c2pwrite = msvcrt.get_osfhandle(stdout) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1027 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1028 # Assuming file-like object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1029 c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1030 c2pwrite = self._make_inheritable(c2pwrite) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1031 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1032 if stderr is None: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1033 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
1034 if errwrite is None: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1035 _, errwrite = _winapi.CreatePipe(None, 0) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1036 errwrite = Handle(errwrite) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1037 _winapi.CloseHandle(_) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
1038 elif stderr == PIPE: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1039 errread, errwrite = _winapi.CreatePipe(None, 0) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1040 errread, errwrite = Handle(errread), Handle(errwrite) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1041 elif stderr == STDOUT: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1042 errwrite = c2pwrite |
|
68600
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1043 elif stderr == DEVNULL: |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1044 errwrite = msvcrt.get_osfhandle(self._get_devnull()) |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1045 elif isinstance(stderr, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1046 errwrite = msvcrt.get_osfhandle(stderr) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1047 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1048 # Assuming file-like object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1049 errwrite = msvcrt.get_osfhandle(stderr.fileno()) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1050 errwrite = self._make_inheritable(errwrite) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1051 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1052 return (p2cread, p2cwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1053 c2pread, c2pwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1054 errread, errwrite) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1055 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1056 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1057 def _make_inheritable(self, handle): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1058 """Return a duplicate of handle, which is inheritable""" |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1059 h = _winapi.DuplicateHandle( |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1060 _winapi.GetCurrentProcess(), handle, |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1061 _winapi.GetCurrentProcess(), 0, 1, |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1062 _winapi.DUPLICATE_SAME_ACCESS) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1063 return Handle(h) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1064 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1065 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1066 def _execute_child(self, args, executable, preexec_fn, close_fds, |
|
78590
65ef6ae39ea3
Cleanup universal_newlines usage for subprocess.Popen, remove unused param.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78572
diff
changeset
|
1067 pass_fds, cwd, env, |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1068 startupinfo, creationflags, shell, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1069 p2cread, p2cwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1070 c2pread, c2pwrite, |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1071 errread, errwrite, |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1072 unused_restore_signals, unused_start_new_session): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1073 """Execute program (MS Windows version)""" |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1074 |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1075 assert not pass_fds, "pass_fds not supported on Windows." |
|
66692
296e6f85f56d
issue6559: Adds a pass_fds parameter to subprocess.Popen that allows the caller
Gregory P. Smith <greg@mad-scientist.com>
parents:
66676
diff
changeset
|
1076 |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43487
diff
changeset
|
1077 if not isinstance(args, str): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1078 args = list2cmdline(args) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1079 |
|
33929
66223a9ebe48
When using shell=True on Windows, don't display a shell window by default. Fixes #1057061.
Peter Astrand <astrand@lysator.liu.se>
parents:
33776
diff
changeset
|
1080 # Process startup details |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1081 if startupinfo is None: |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
1082 startupinfo = STARTUPINFO() |
|
61793
441491572fce
Issue #8780: Fix a regression introduced by r78946 in subprocess on Windows
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61693
diff
changeset
|
1083 if -1 not in (p2cread, c2pwrite, errwrite): |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1084 startupinfo.dwFlags |= _winapi.STARTF_USESTDHANDLES |
|
33929
66223a9ebe48
When using shell=True on Windows, don't display a shell window by default. Fixes #1057061.
Peter Astrand <astrand@lysator.liu.se>
parents:
33776
diff
changeset
|
1085 startupinfo.hStdInput = p2cread |
|
66223a9ebe48
When using shell=True on Windows, don't display a shell window by default. Fixes #1057061.
Peter Astrand <astrand@lysator.liu.se>
parents:
33776
diff
changeset
|
1086 startupinfo.hStdOutput = c2pwrite |
|
66223a9ebe48
When using shell=True on Windows, don't display a shell window by default. Fixes #1057061.
Peter Astrand <astrand@lysator.liu.se>
parents:
33776
diff
changeset
|
1087 startupinfo.hStdError = errwrite |
|
66223a9ebe48
When using shell=True on Windows, don't display a shell window by default. Fixes #1057061.
Peter Astrand <astrand@lysator.liu.se>
parents:
33776
diff
changeset
|
1088 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1089 if shell: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1090 startupinfo.dwFlags |= _winapi.STARTF_USESHOWWINDOW |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1091 startupinfo.wShowWindow = _winapi.SW_HIDE |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1092 comspec = os.environ.get("COMSPEC", "cmd.exe") |
|
63930
8499ae5d9719
#2304: fix incorporating Eric Smith's .format suggestion and tested on Ubuntu as well as Windows
Tim Golden <mail@timgolden.me.uk>
parents:
63843
diff
changeset
|
1093 args = '{} /c "{}"'.format (comspec, args) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1094 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1095 # Start the process |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1096 try: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1097 hp, ht, pid, tid = _winapi.CreateProcess(executable, args, |
| 33735 | 1098 # no special security |
| 1099 None, None, | |
|
41969
9d02a4adf574
Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41845
diff
changeset
|
1100 int(not close_fds), |
| 33735 | 1101 creationflags, |
| 1102 env, | |
| 1103 cwd, | |
| 1104 startupinfo) | |
|
63816
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
1105 finally: |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
1106 # Child is launched. Close the parent's copy of those pipe |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
1107 # handles that only the child should have open. You need |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
1108 # to make sure that no handles to the write end of the |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
1109 # output pipe are maintained in this process or else the |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
1110 # pipe will not close when the child process exits and the |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
1111 # ReadFile will hang. |
|
63815
e41ca6672f82
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63094
diff
changeset
|
1112 if p2cread != -1: |
|
63816
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
1113 p2cread.Close() |
|
63815
e41ca6672f82
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63094
diff
changeset
|
1114 if c2pwrite != -1: |
|
63816
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
1115 c2pwrite.Close() |
|
63815
e41ca6672f82
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63094
diff
changeset
|
1116 if errwrite != -1: |
|
63816
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
1117 errwrite.Close() |
|
68600
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1118 if hasattr(self, '_devnull'): |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1119 os.close(self._devnull) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1120 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1121 # Retain the process handle, but close the thread handle |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1122 self._child_created = True |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1123 self._handle = Handle(hp) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1124 self.pid = pid |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1125 _winapi.CloseHandle(ht) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1126 |
| 61569 | 1127 def _internal_poll(self, _deadstate=None, |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1128 _WaitForSingleObject=_winapi.WaitForSingleObject, |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1129 _WAIT_OBJECT_0=_winapi.WAIT_OBJECT_0, |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1130 _GetExitCodeProcess=_winapi.GetExitCodeProcess): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1131 """Check if child process has terminated. Returns returncode |
| 61569 | 1132 attribute. |
| 1133 | |
| 1134 This method is called by __del__, so it can only refer to objects | |
| 1135 in its local scope. | |
| 1136 | |
| 1137 """ | |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1138 if self.returncode is None: |
| 61569 | 1139 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: |
| 1140 self.returncode = _GetExitCodeProcess(self._handle) | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1141 return self.returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1142 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1143 |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1144 def wait(self, timeout=None, endtime=None): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1145 """Wait for child process to terminate. Returns returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1146 attribute.""" |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1147 if endtime is not None: |
|
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1148 timeout = self._remaining_time(endtime) |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1149 if timeout is None: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1150 timeout_millis = _winapi.INFINITE |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1151 else: |
|
68807
ab2363f89058
Fix timeout error message on windows to not be in milliseconds.
Reid Kleckner <reid@kleckner.net>
parents:
68750
diff
changeset
|
1152 timeout_millis = int(timeout * 1000) |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1153 if self.returncode is None: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1154 result = _winapi.WaitForSingleObject(self._handle, |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1155 timeout_millis) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1156 if result == _winapi.WAIT_TIMEOUT: |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1157 raise TimeoutExpired(self.args, timeout) |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1158 self.returncode = _winapi.GetExitCodeProcess(self._handle) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1159 return self.returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1160 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1161 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1162 def _readerthread(self, fh, buffer): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1163 buffer.append(fh.read()) |
|
67130
38d66980187e
Issue #10763: subprocess.communicate() closes stdout and stderr if both are
Victor Stinner <victor.stinner@haypocalc.com>
parents:
66893
diff
changeset
|
1164 fh.close() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1165 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1166 |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1167 def _communicate(self, input, endtime, orig_timeout): |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1168 # Start reader threads feeding into a list hanging off of this |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1169 # object, unless they've already been started. |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1170 if self.stdout and not hasattr(self, "_stdout_buff"): |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1171 self._stdout_buff = [] |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1172 self.stdout_thread = \ |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1173 threading.Thread(target=self._readerthread, |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1174 args=(self.stdout, self._stdout_buff)) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1175 self.stdout_thread.daemon = True |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1176 self.stdout_thread.start() |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1177 if self.stderr and not hasattr(self, "_stderr_buff"): |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1178 self._stderr_buff = [] |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1179 self.stderr_thread = \ |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1180 threading.Thread(target=self._readerthread, |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1181 args=(self.stderr, self._stderr_buff)) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1182 self.stderr_thread.daemon = True |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1183 self.stderr_thread.start() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1184 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1185 if self.stdin: |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1186 if input is not None: |
|
69154
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68679
diff
changeset
|
1187 try: |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68679
diff
changeset
|
1188 self.stdin.write(input) |
|
81039
7d69d04522e3
Replace IOError with OSError (#16715)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
81021
diff
changeset
|
1189 except OSError as e: |
|
69154
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68679
diff
changeset
|
1190 if e.errno != errno.EPIPE: |
|
158495d49f58
Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68679
diff
changeset
|
1191 raise |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1192 self.stdin.close() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1193 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1194 # Wait for the reader threads, or time out. If we time out, the |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1195 # threads remain reading and the fds left open in case the user |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1196 # calls communicate again. |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1197 if self.stdout is not None: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1198 self.stdout_thread.join(self._remaining_time(endtime)) |
|
78654
882da270d21a
Use Thread.is_alive() instead of old-style Thread.isAlive() in subprocess.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78590
diff
changeset
|
1199 if self.stdout_thread.is_alive(): |
|
68750
6017c431ff0d
Fix the Windows timeout code.
Reid Kleckner <reid@kleckner.net>
parents:
68681
diff
changeset
|
1200 raise TimeoutExpired(self.args, orig_timeout) |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1201 if self.stderr is not None: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1202 self.stderr_thread.join(self._remaining_time(endtime)) |
|
78654
882da270d21a
Use Thread.is_alive() instead of old-style Thread.isAlive() in subprocess.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78590
diff
changeset
|
1203 if self.stderr_thread.is_alive(): |
|
68750
6017c431ff0d
Fix the Windows timeout code.
Reid Kleckner <reid@kleckner.net>
parents:
68681
diff
changeset
|
1204 raise TimeoutExpired(self.args, orig_timeout) |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1205 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1206 # Collect the output from and close both pipes, now that we know |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1207 # both have been read successfully. |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1208 stdout = None |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1209 stderr = None |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1210 if self.stdout: |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1211 stdout = self._stdout_buff |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1212 self.stdout.close() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1213 if self.stderr: |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1214 stderr = self._stderr_buff |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1215 self.stderr.close() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1216 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1217 # All data exchanged. Translate lists into strings. |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1218 if stdout is not None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1219 stdout = stdout[0] |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1220 if stderr is not None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1221 stderr = stderr[0] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1222 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1223 return (stdout, stderr) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1224 |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1225 def send_signal(self, sig): |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1226 """Send a signal to the process |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1227 """ |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1228 if sig == signal.SIGTERM: |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1229 self.terminate() |
|
60556
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
59619
diff
changeset
|
1230 elif sig == signal.CTRL_C_EVENT: |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
59619
diff
changeset
|
1231 os.kill(self.pid, signal.CTRL_C_EVENT) |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
59619
diff
changeset
|
1232 elif sig == signal.CTRL_BREAK_EVENT: |
|
a2f5b3b19eb2
Port #1220212 (os.kill for Win32) to py3k.
Brian Curtin <brian.curtin@gmail.com>
parents:
59619
diff
changeset
|
1233 os.kill(self.pid, signal.CTRL_BREAK_EVENT) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1234 else: |
|
64518
1a1e7254d965
Adjust #8956 to add the bad signal number to the exception message.
Brian Curtin <brian.curtin@gmail.com>
parents:
64493
diff
changeset
|
1235 raise ValueError("Unsupported signal: {}".format(sig)) |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1236 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1237 def terminate(self): |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1238 """Terminates the process |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1239 """ |
|
75524
41b1fe5a75a6
Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under Windows when the child process has already exited.
Antoine Pitrou <solipsis@pitrou.net>
parents:
71903
diff
changeset
|
1240 try: |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1241 _winapi.TerminateProcess(self._handle, 1) |
|
75525
f452d7d5470d
Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under Windows when the child process has already exited.
Antoine Pitrou <solipsis@pitrou.net>
diff
changeset
|
1242 except PermissionError: |
|
75524
41b1fe5a75a6
Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under Windows when the child process has already exited.
Antoine Pitrou <solipsis@pitrou.net>
parents:
71903
diff
changeset
|
1243 # ERROR_ACCESS_DENIED (winerror 5) is received when the |
|
41b1fe5a75a6
Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under Windows when the child process has already exited.
Antoine Pitrou <solipsis@pitrou.net>
parents:
71903
diff
changeset
|
1244 # process already died. |
|
76405
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1245 rc = _winapi.GetExitCodeProcess(self._handle) |
|
f3a27d11101a
Issue #11750: The Windows API functions scattered in the _subprocess and
Antoine Pitrou <solipsis@pitrou.net>
parents:
75525
diff
changeset
|
1246 if rc == _winapi.STILL_ACTIVE: |
|
75524
41b1fe5a75a6
Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under Windows when the child process has already exited.
Antoine Pitrou <solipsis@pitrou.net>
parents:
71903
diff
changeset
|
1247 raise |
|
41b1fe5a75a6
Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under Windows when the child process has already exited.
Antoine Pitrou <solipsis@pitrou.net>
parents:
71903
diff
changeset
|
1248 self.returncode = rc |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1249 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1250 kill = terminate |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1251 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1252 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1253 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1254 # POSIX methods |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1255 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1256 def _get_handles(self, stdin, stdout, stderr): |
|
55617
a267c604465f
Recorded merge of revisions 74057 via svnmerge from
Georg Brandl <georg@python.org>
parents:
55602
diff
changeset
|
1257 """Construct and return tuple with IO objects: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1258 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1259 """ |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1260 p2cread, p2cwrite = -1, -1 |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1261 c2pread, c2pwrite = -1, -1 |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1262 errread, errwrite = -1, -1 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1263 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1264 if stdin is None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1265 pass |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1266 elif stdin == PIPE: |
|
85420
ef889c3d5dc6
Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents:
85222
diff
changeset
|
1267 p2cread, p2cwrite = os.pipe() |
|
68600
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1268 elif stdin == DEVNULL: |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1269 p2cread = self._get_devnull() |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1270 elif isinstance(stdin, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1271 p2cread = stdin |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1272 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1273 # Assuming file-like object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1274 p2cread = stdin.fileno() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1275 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1276 if stdout is None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1277 pass |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1278 elif stdout == PIPE: |
|
85420
ef889c3d5dc6
Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents:
85222
diff
changeset
|
1279 c2pread, c2pwrite = os.pipe() |
|
68600
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1280 elif stdout == DEVNULL: |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1281 c2pwrite = self._get_devnull() |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1282 elif isinstance(stdout, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1283 c2pwrite = stdout |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1284 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1285 # Assuming file-like object |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
1286 c2pwrite = stdout.fileno() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1287 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1288 if stderr is None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1289 pass |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1290 elif stderr == PIPE: |
|
85420
ef889c3d5dc6
Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents:
85222
diff
changeset
|
1291 errread, errwrite = os.pipe() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1292 elif stderr == STDOUT: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1293 errwrite = c2pwrite |
|
68600
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1294 elif stderr == DEVNULL: |
|
eaf93e156dff
Issue #5870: Add subprocess.DEVNULL constant.
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
68587
diff
changeset
|
1295 errwrite = self._get_devnull() |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1296 elif isinstance(stderr, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1297 errwrite = stderr |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1298 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1299 # Assuming file-like object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1300 errwrite = stderr.fileno() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1301 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1302 return (p2cread, p2cwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1303 c2pread, c2pwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1304 errread, errwrite) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1305 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1306 |
|
67331
9ad896426f79
Un-complicate some code
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1307 def _close_fds(self, fds_to_keep): |
|
66692
296e6f85f56d
issue6559: Adds a pass_fds parameter to subprocess.Popen that allows the caller
Gregory P. Smith <greg@mad-scientist.com>
parents:
66676
diff
changeset
|
1308 start_fd = 3 |
|
67331
9ad896426f79
Un-complicate some code
Antoine Pitrou <solipsis@pitrou.net>
parents:
67310
diff
changeset
|
1309 for fd in sorted(fds_to_keep): |
|
66889
59b43dc34158
Issue #6559: fix the subprocess.Popen pass_fds implementation. Add a unittest.
Gregory P. Smith <greg@mad-scientist.com>
parents:
66868
diff
changeset
|
1310 if fd >= start_fd: |
|
66692
296e6f85f56d
issue6559: Adds a pass_fds parameter to subprocess.Popen that allows the caller
Gregory P. Smith <greg@mad-scientist.com>
parents:
66676
diff
changeset
|
1311 os.closerange(start_fd, fd) |
|
296e6f85f56d
issue6559: Adds a pass_fds parameter to subprocess.Popen that allows the caller
Gregory P. Smith <greg@mad-scientist.com>
parents:
66676
diff
changeset
|
1312 start_fd = fd + 1 |
|
296e6f85f56d
issue6559: Adds a pass_fds parameter to subprocess.Popen that allows the caller
Gregory P. Smith <greg@mad-scientist.com>
parents:
66676
diff
changeset
|
1313 if start_fd <= MAXFD: |
|
296e6f85f56d
issue6559: Adds a pass_fds parameter to subprocess.Popen that allows the caller
Gregory P. Smith <greg@mad-scientist.com>
parents:
66676
diff
changeset
|
1314 os.closerange(start_fd, MAXFD) |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
1315 |
|
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
1316 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1317 def _execute_child(self, args, executable, preexec_fn, close_fds, |
|
78590
65ef6ae39ea3
Cleanup universal_newlines usage for subprocess.Popen, remove unused param.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
78572
diff
changeset
|
1318 pass_fds, cwd, env, |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1319 startupinfo, creationflags, shell, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1320 p2cread, p2cwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1321 c2pread, c2pwrite, |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1322 errread, errwrite, |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1323 restore_signals, start_new_session): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1324 """Execute program (POSIX version)""" |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1325 |
|
68214
738feec9ced0
Issue #8513: On UNIX, subprocess supports bytes command string.
Victor Stinner <victor.stinner@haypocalc.com>
parents:
67358
diff
changeset
|
1326 if isinstance(args, (str, bytes)): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1327 args = [args] |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39646
diff
changeset
|
1328 else: |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39646
diff
changeset
|
1329 args = list(args) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1330 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1331 if shell: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1332 args = ["/bin/sh", "-c"] + args |
|
63095
ad66eff9800b
Merged revisions 82971 via svnmerge from
Stefan Krah <stefan@bytereef.org>
parents:
62404
diff
changeset
|
1333 if executable: |
|
ad66eff9800b
Merged revisions 82971 via svnmerge from
Stefan Krah <stefan@bytereef.org>
parents:
62404
diff
changeset
|
1334 args[0] = executable |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1335 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1336 if executable is None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1337 executable = args[0] |
|
79632
e938fa6be509
Fixes Issue #16114: The subprocess module no longer provides a
Gregory P. Smith <greg@krypto.org>
parents:
79266
diff
changeset
|
1338 orig_executable = executable |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1339 |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1340 # For transferring possible exec failure from child to parent. |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1341 # Data format: "exception name:hex errno:description" |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1342 # Pickle is not used; it is complex and involves memory allocation. |
|
85420
ef889c3d5dc6
Issue #18571: Implementation of the PEP 446: file descriptors and file handles
Victor Stinner <victor.stinner@gmail.com>
parents:
85222
diff
changeset
|
1343 errpipe_read, errpipe_write = os.pipe() |
|
87683
2df5e1f537b0
Fixes issue #15798: subprocess.Popen() no longer fails if file
Gregory P. Smith <greg@krypto.org>
parents:
87675
diff
changeset
|
1344 # errpipe_write must not be in the standard io 0, 1, or 2 fd range. |
|
2df5e1f537b0
Fixes issue #15798: subprocess.Popen() no longer fails if file
Gregory P. Smith <greg@krypto.org>
parents:
87675
diff
changeset
|
1345 low_fds_to_close = [] |
|
2df5e1f537b0
Fixes issue #15798: subprocess.Popen() no longer fails if file
Gregory P. Smith <greg@krypto.org>
parents:
87675
diff
changeset
|
1346 while errpipe_write < 3: |
|
2df5e1f537b0
Fixes issue #15798: subprocess.Popen() no longer fails if file
Gregory P. Smith <greg@krypto.org>
parents:
87675
diff
changeset
|
1347 low_fds_to_close.append(errpipe_write) |
|
2df5e1f537b0
Fixes issue #15798: subprocess.Popen() no longer fails if file
Gregory P. Smith <greg@krypto.org>
parents:
87675
diff
changeset
|
1348 errpipe_write = os.dup(errpipe_write) |
|
2df5e1f537b0
Fixes issue #15798: subprocess.Popen() no longer fails if file
Gregory P. Smith <greg@krypto.org>
parents:
87675
diff
changeset
|
1349 for low_fd in low_fds_to_close: |
|
2df5e1f537b0
Fixes issue #15798: subprocess.Popen() no longer fails if file
Gregory P. Smith <greg@krypto.org>
parents:
87675
diff
changeset
|
1350 os.close(low_fd) |
|
44810
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
1351 try: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1352 try: |
|
70467
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1353 # We must avoid complex work that could involve |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1354 # malloc or free in the child process to avoid |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1355 # potential deadlocks, thus we do all this here. |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1356 # and pass it to fork_exec() |
|
71524
1140b32747c9
Issue #12607: In subprocess, fix issue where if stdin, stdout or stderr is
Ross Lagerwall <rosslagerwall@gmail.com>
parents:
71485
diff
changeset
|
1357 |
|
70922
10ecf8576eb2
(merge 3.2) Close #12383: Fix subprocess module with env={}: don't copy the
Victor Stinner <victor.stinner@haypocalc.com>
diff
changeset
|
1358 if env is not None: |
|
70467
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1359 env_list = [os.fsencode(k) + b'=' + os.fsencode(v) |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1360 for k, v in env.items()] |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1361 else: |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1362 env_list = None # Use execv instead of execve. |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1363 executable = os.fsencode(executable) |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1364 if os.path.dirname(executable): |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1365 executable_list = (executable,) |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1366 else: |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1367 # This matches the behavior of os._execvpe(). |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1368 executable_list = tuple( |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1369 os.path.join(os.fsencode(dir), executable) |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1370 for dir in os.get_exec_path(env)) |
|
87674
efcdf2a70f2a
Undo supposed fix for Issue #15798 until I understand why this is
Gregory P. Smith <greg@krypto.org>
parents:
87672
diff
changeset
|
1371 fds_to_keep = set(pass_fds) |
|
70467
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1372 fds_to_keep.add(errpipe_write) |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1373 self.pid = _posixsubprocess.fork_exec( |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1374 args, executable_list, |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1375 close_fds, sorted(fds_to_keep), cwd, env_list, |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1376 p2cread, p2cwrite, c2pread, c2pwrite, |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1377 errread, errwrite, |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1378 errpipe_read, errpipe_write, |
|
75ca834df824
The _posixsubprocess module is now required on POSIX.
Gregory P. Smith <greg@krypto.org>
parents:
70289
diff
changeset
|
1379 restore_signals, start_new_session, preexec_fn) |
|
71904
148d75d106f1
Issue #12650: Fix a race condition where a subprocess.Popen could leak
Charles-François Natali <neologix@free.fr>
diff
changeset
|
1380 self._child_created = True |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1381 finally: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1382 # be sure the FD is closed no matter what |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1383 os.close(errpipe_write) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1384 |
|
84160
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
1385 # self._devnull is not always defined. |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
1386 devnull_fd = getattr(self, '_devnull', None) |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
1387 if p2cread != -1 and p2cwrite != -1 and p2cread != devnull_fd: |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1388 os.close(p2cread) |
|
84160
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
1389 if c2pwrite != -1 and c2pread != -1 and c2pwrite != devnull_fd: |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1390 os.close(c2pwrite) |
|
84160
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
1391 if errwrite != -1 and errread != -1 and errwrite != devnull_fd: |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1392 os.close(errwrite) |
|
84160
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
1393 if devnull_fd is not None: |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
1394 os.close(devnull_fd) |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
1395 # Prevent a double close of these fds from __init__ on error. |
|
be08c8b8c574
Prevent a possible double close of parent pipe fds when the subprocess
Gregory P. Smith <greg@krypto.org>
parents:
82917
diff
changeset
|
1396 self._closed_child_pipe_fds = True |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1397 |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1398 # Wait for exec to fail or succeed; possibly raising an |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1399 # exception (limited in size) |
|
80372
99c63578f932
Rename a local variable for readability and change a "this can't
Gregory P. Smith <greg@krypto.org>
parents:
80368
diff
changeset
|
1400 errpipe_data = bytearray() |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1401 while True: |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1402 part = _eintr_retry_call(os.read, errpipe_read, 50000) |
|
80372
99c63578f932
Rename a local variable for readability and change a "this can't
Gregory P. Smith <greg@krypto.org>
parents:
80368
diff
changeset
|
1403 errpipe_data += part |
|
99c63578f932
Rename a local variable for readability and change a "this can't
Gregory P. Smith <greg@krypto.org>
parents:
80368
diff
changeset
|
1404 if not part or len(errpipe_data) > 50000: |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1405 break |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1406 finally: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1407 # be sure the FD is closed no matter what |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1408 os.close(errpipe_read) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1409 |
|
80372
99c63578f932
Rename a local variable for readability and change a "this can't
Gregory P. Smith <greg@krypto.org>
parents:
80368
diff
changeset
|
1410 if errpipe_data: |
|
66895
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1411 try: |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1412 _eintr_retry_call(os.waitpid, self.pid, 0) |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1413 except OSError as e: |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1414 if e.errno != errno.ECHILD: |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1415 raise |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1416 try: |
|
80372
99c63578f932
Rename a local variable for readability and change a "this can't
Gregory P. Smith <greg@krypto.org>
parents:
80368
diff
changeset
|
1417 exception_name, hex_errno, err_msg = ( |
|
99c63578f932
Rename a local variable for readability and change a "this can't
Gregory P. Smith <greg@krypto.org>
parents:
80368
diff
changeset
|
1418 errpipe_data.split(b':', 2)) |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1419 except ValueError: |
|
80375
9180fb4eccc7
Raise our own SubprocessError rather than a RuntimeError in when dealing with
Gregory P. Smith <greg@krypto.org>
parents:
80373
diff
changeset
|
1420 exception_name = b'SubprocessError' |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1421 hex_errno = b'0' |
|
80376
bbfff05ed34f
Remove the subprocess "bad exception data" warning (formerly a print!)
Gregory P. Smith <greg@krypto.org>
parents:
80372
diff
changeset
|
1422 err_msg = (b'Bad exception data from child: ' + |
|
bbfff05ed34f
Remove the subprocess "bad exception data" warning (formerly a print!)
Gregory P. Smith <greg@krypto.org>
parents:
80372
diff
changeset
|
1423 repr(errpipe_data)) |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1424 child_exception_type = getattr( |
|
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1425 builtins, exception_name.decode('ascii'), |
|
80375
9180fb4eccc7
Raise our own SubprocessError rather than a RuntimeError in when dealing with
Gregory P. Smith <greg@krypto.org>
parents:
80373
diff
changeset
|
1426 SubprocessError) |
|
60896
8428eaa2d3ad
Issue #8467: Pure Python implementation of subprocess encodes the error message
Victor Stinner <victor.stinner@haypocalc.com>
parents:
60556
diff
changeset
|
1427 err_msg = err_msg.decode(errors="surrogatepass") |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1428 if issubclass(child_exception_type, OSError) and hex_errno: |
|
66309
43e50bb923a9
don't shadow globals
Benjamin Peterson <benjamin@python.org>
parents:
66307
diff
changeset
|
1429 errno_num = int(hex_errno, 16) |
|
79632
e938fa6be509
Fixes Issue #16114: The subprocess module no longer provides a
Gregory P. Smith <greg@krypto.org>
parents:
79266
diff
changeset
|
1430 child_exec_never_called = (err_msg == "noexec") |
|
e938fa6be509
Fixes Issue #16114: The subprocess module no longer provides a
Gregory P. Smith <greg@krypto.org>
parents:
79266
diff
changeset
|
1431 if child_exec_never_called: |
|
e938fa6be509
Fixes Issue #16114: The subprocess module no longer provides a
Gregory P. Smith <greg@krypto.org>
parents:
79266
diff
changeset
|
1432 err_msg = "" |
|
66309
43e50bb923a9
don't shadow globals
Benjamin Peterson <benjamin@python.org>
parents:
66307
diff
changeset
|
1433 if errno_num != 0: |
|
43e50bb923a9
don't shadow globals
Benjamin Peterson <benjamin@python.org>
parents:
66307
diff
changeset
|
1434 err_msg = os.strerror(errno_num) |
|
43e50bb923a9
don't shadow globals
Benjamin Peterson <benjamin@python.org>
parents:
66307
diff
changeset
|
1435 if errno_num == errno.ENOENT: |
|
79632
e938fa6be509
Fixes Issue #16114: The subprocess module no longer provides a
Gregory P. Smith <greg@krypto.org>
parents:
79266
diff
changeset
|
1436 if child_exec_never_called: |
|
e938fa6be509
Fixes Issue #16114: The subprocess module no longer provides a
Gregory P. Smith <greg@krypto.org>
parents:
79266
diff
changeset
|
1437 # The error must be from chdir(cwd). |
|
e938fa6be509
Fixes Issue #16114: The subprocess module no longer provides a
Gregory P. Smith <greg@krypto.org>
parents:
79266
diff
changeset
|
1438 err_msg += ': ' + repr(cwd) |
|
e938fa6be509
Fixes Issue #16114: The subprocess module no longer provides a
Gregory P. Smith <greg@krypto.org>
parents:
79266
diff
changeset
|
1439 else: |
|
e938fa6be509
Fixes Issue #16114: The subprocess module no longer provides a
Gregory P. Smith <greg@krypto.org>
parents:
79266
diff
changeset
|
1440 err_msg += ': ' + repr(orig_executable) |
|
66309
43e50bb923a9
don't shadow globals
Benjamin Peterson <benjamin@python.org>
parents:
66307
diff
changeset
|
1441 raise child_exception_type(errno_num, err_msg) |
|
59605
768722b2ae0a
* Replaces the internals of the subprocess module from fork through exec on
Gregory P. Smith <greg@mad-scientist.com>
parents:
59471
diff
changeset
|
1442 raise child_exception_type(err_msg) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1443 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1444 |
| 61569 | 1445 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, |
| 1446 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, | |
| 1447 _WEXITSTATUS=os.WEXITSTATUS): | |
| 1448 # This method is called (indirectly) by __del__, so it cannot | |
| 1449 # refer to anything outside of its local scope.""" | |
| 1450 if _WIFSIGNALED(sts): | |
| 1451 self.returncode = -_WTERMSIG(sts) | |
| 1452 elif _WIFEXITED(sts): | |
| 1453 self.returncode = _WEXITSTATUS(sts) | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1454 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1455 # Should never happen |
|
80375
9180fb4eccc7
Raise our own SubprocessError rather than a RuntimeError in when dealing with
Gregory P. Smith <greg@krypto.org>
parents:
80373
diff
changeset
|
1456 raise SubprocessError("Unknown child exit status!") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1457 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1458 |
| 61569 | 1459 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, |
|
81021
8f30461395b1
Keep ref to ECHILD in local scope (#16650)
Andrew Svetlov <andrew.svetlov@gmail.com>
diff
changeset
|
1460 _WNOHANG=os.WNOHANG, _ECHILD=errno.ECHILD): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1461 """Check if child process has terminated. Returns returncode |
| 61569 | 1462 attribute. |
| 1463 | |
| 1464 This method is called by __del__, so it cannot reference anything | |
| 1465 outside of the local scope (nor can any methods it calls). | |
| 1466 | |
| 1467 """ | |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1468 if self.returncode is None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1469 try: |
| 61569 | 1470 pid, sts = _waitpid(self.pid, _WNOHANG) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1471 if pid == self.pid: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1472 self._handle_exitstatus(sts) |
|
80932
47f98a550d42
Issue #16706: get rid of os.error
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
80922
diff
changeset
|
1473 except OSError as e: |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1474 if _deadstate is not None: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
1475 self.returncode = _deadstate |
|
81019
0cc4fe5634cf
Keep ref to ECHILD in local scope (#16650)
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
80379
diff
changeset
|
1476 elif e.errno == _ECHILD: |
|
79266
484c50bf445c
Fixes issue #15756: subprocess.poll() now properly handles errno.ECHILD
Gregory P. Smith <greg@krypto.org>
parents:
78655
diff
changeset
|
1477 # This happens if SIGCLD is set to be ignored or |
|
484c50bf445c
Fixes issue #15756: subprocess.poll() now properly handles errno.ECHILD
Gregory P. Smith <greg@krypto.org>
parents:
78655
diff
changeset
|
1478 # waiting for child processes has otherwise been |
|
484c50bf445c
Fixes issue #15756: subprocess.poll() now properly handles errno.ECHILD
Gregory P. Smith <greg@krypto.org>
parents:
78655
diff
changeset
|
1479 # disabled for our process. This child is dead, we |
|
484c50bf445c
Fixes issue #15756: subprocess.poll() now properly handles errno.ECHILD
Gregory P. Smith <greg@krypto.org>
parents:
78655
diff
changeset
|
1480 # can't get the status. |
|
484c50bf445c
Fixes issue #15756: subprocess.poll() now properly handles errno.ECHILD
Gregory P. Smith <greg@krypto.org>
parents:
78655
diff
changeset
|
1481 # http://bugs.python.org/issue15756 |
|
484c50bf445c
Fixes issue #15756: subprocess.poll() now properly handles errno.ECHILD
Gregory P. Smith <greg@krypto.org>
parents:
78655
diff
changeset
|
1482 self.returncode = 0 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1483 return self.returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1484 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1485 |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1486 def _try_wait(self, wait_flags): |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1487 try: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1488 (pid, sts) = _eintr_retry_call(os.waitpid, self.pid, wait_flags) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1489 except OSError as e: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1490 if e.errno != errno.ECHILD: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1491 raise |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1492 # This happens if SIGCLD is set to be ignored or waiting |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1493 # for child processes has otherwise been disabled for our |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1494 # process. This child is dead, we can't get the status. |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1495 pid = self.pid |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1496 sts = 0 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1497 return (pid, sts) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1498 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1499 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1500 def wait(self, timeout=None, endtime=None): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1501 """Wait for child process to terminate. Returns returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1502 attribute.""" |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1503 if self.returncode is not None: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1504 return self.returncode |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1505 |
|
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1506 # endtime is preferred to timeout. timeout is only used for |
|
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1507 # printing. |
|
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1508 if endtime is not None or timeout is not None: |
|
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1509 if endtime is None: |
|
77243
1345cf58738d
Close #14690: Use monotonic clock instead of system clock in the sched,
Victor Stinner <victor.stinner@gmail.com>
parents:
77154
diff
changeset
|
1510 endtime = _time() + timeout |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1511 elif timeout is None: |
|
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1512 timeout = self._remaining_time(endtime) |
|
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1513 |
|
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1514 if endtime is not None: |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1515 # Enter a busy loop if we have a timeout. This busy loop was |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1516 # cribbed from Lib/threading.py in Thread.wait() at r71065. |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1517 delay = 0.0005 # 500 us -> initial delay of 1 ms |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1518 while True: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1519 (pid, sts) = self._try_wait(os.WNOHANG) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1520 assert pid == self.pid or pid == 0 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1521 if pid == self.pid: |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1522 self._handle_exitstatus(sts) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1523 break |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1524 remaining = self._remaining_time(endtime) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1525 if remaining <= 0: |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1526 raise TimeoutExpired(self.args, timeout) |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1527 delay = min(delay * 2, remaining, .05) |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1528 time.sleep(delay) |
|
80363
61a0eace0f2e
Fixes issue #14396: Handle the odd rare case of waitpid returning 0
Gregory P. Smith <greg@krypto.org>
diff
changeset
|
1529 else: |
|
61a0eace0f2e
Fixes issue #14396: Handle the odd rare case of waitpid returning 0
Gregory P. Smith <greg@krypto.org>
diff
changeset
|
1530 while self.returncode is None: |
|
61a0eace0f2e
Fixes issue #14396: Handle the odd rare case of waitpid returning 0
Gregory P. Smith <greg@krypto.org>
diff
changeset
|
1531 (pid, sts) = self._try_wait(0) |
|
61a0eace0f2e
Fixes issue #14396: Handle the odd rare case of waitpid returning 0
Gregory P. Smith <greg@krypto.org>
diff
changeset
|
1532 # Check the pid and loop as waitpid has been known to return |
|
61a0eace0f2e
Fixes issue #14396: Handle the odd rare case of waitpid returning 0
Gregory P. Smith <greg@krypto.org>
diff
changeset
|
1533 # 0 even without WNOHANG in odd situations. issue14396. |
|
61a0eace0f2e
Fixes issue #14396: Handle the odd rare case of waitpid returning 0
Gregory P. Smith <greg@krypto.org>
diff
changeset
|
1534 if pid == self.pid: |
|
61a0eace0f2e
Fixes issue #14396: Handle the odd rare case of waitpid returning 0
Gregory P. Smith <greg@krypto.org>
diff
changeset
|
1535 self._handle_exitstatus(sts) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1536 return self.returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1537 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1538 |
|
68618
a161081e8f7c
Include the timeout value in TimeoutExpired.
Reid Kleckner <reid@kleckner.net>
parents:
68600
diff
changeset
|
1539 def _communicate(self, input, endtime, orig_timeout): |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1540 if self.stdin and not self._communication_started: |
|
55602
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1541 # Flush stdio buffer. This might block, if the user has |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1542 # been writing to .stdin in an uncontrolled fashion. |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1543 self.stdin.flush() |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1544 if not input: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1545 self.stdin.close() |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1546 |
|
87008
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1547 stdout = None |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1548 stderr = None |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1549 |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1550 # Only create this mapping if we haven't already. |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1551 if not self._communication_started: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1552 self._fileobj2output = {} |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1553 if self.stdout: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1554 self._fileobj2output[self.stdout] = [] |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1555 if self.stderr: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1556 self._fileobj2output[self.stderr] = [] |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1557 |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1558 if self.stdout: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1559 stdout = self._fileobj2output[self.stdout] |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1560 if self.stderr: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1561 stderr = self._fileobj2output[self.stderr] |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1562 |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1563 self._save_input(input) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1564 |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1565 with _PopenSelector() as selector: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1566 if self.stdin and input: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1567 selector.register(self.stdin, selectors.EVENT_WRITE) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1568 if self.stdout: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1569 selector.register(self.stdout, selectors.EVENT_READ) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1570 if self.stderr: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1571 selector.register(self.stderr, selectors.EVENT_READ) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1572 |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1573 while selector.get_map(): |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1574 timeout = self._remaining_time(endtime) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1575 if timeout is not None and timeout < 0: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1576 raise TimeoutExpired(self.args, orig_timeout) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1577 |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1578 ready = selector.select(timeout) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1579 self._check_timeout(endtime, orig_timeout) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1580 |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1581 # XXX Rewrite these to use non-blocking I/O on the file |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1582 # objects; they are no longer using C stdio! |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1583 |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1584 for key, events in ready: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1585 if key.fileobj is self.stdin: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1586 chunk = self._input[self._input_offset : |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1587 self._input_offset + _PIPE_BUF] |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1588 try: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1589 self._input_offset += os.write(key.fd, chunk) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1590 except OSError as e: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1591 if e.errno == errno.EPIPE: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1592 selector.unregister(key.fileobj) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1593 key.fileobj.close() |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1594 else: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1595 raise |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1596 else: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1597 if self._input_offset >= len(self._input): |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1598 selector.unregister(key.fileobj) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1599 key.fileobj.close() |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1600 elif key.fileobj in (self.stdout, self.stderr): |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1601 data = os.read(key.fd, 4096) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1602 if not data: |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1603 selector.unregister(key.fileobj) |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1604 key.fileobj.close() |
|
71b618f0c8e9
Issue #18923: Update subprocess to use the new selectors module.
Charles-François Natali <cf.natali@gmail.com>
parents:
86941
diff
changeset
|
1605 self._fileobj2output[key.fileobj].append(data) |
|
68454
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1606 |
|
c4a0fa6e687c
Add a 'timeout' argument to subprocess.Popen.
Reid Kleckner <reid@kleckner.net>
parents:
68258
diff
changeset
|
1607 self.wait(timeout=self._remaining_time(endtime)) |
|
55602
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1608 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1609 # All data exchanged. Translate lists into strings. |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1610 if stdout is not None: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1611 stdout = b''.join(stdout) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1612 if stderr is not None: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1613 stderr = b''.join(stderr) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1614 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1615 # Translate newlines, if requested. |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1616 # This also turns bytes into strings. |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1617 if self.universal_newlines: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1618 if stdout is not None: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1619 stdout = self._translate_newlines(stdout, |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1620 self.stdout.encoding) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1621 if stderr is not None: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1622 stderr = self._translate_newlines(stderr, |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1623 self.stderr.encoding) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1624 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1625 return (stdout, stderr) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1626 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1627 |
|
78572
9d86480cc177
Issue #15592. Fix regression: subprocess.communicate() breaks on no input with universal newlines true.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
77243
diff
changeset
|
1628 def _save_input(self, input): |
|
9d86480cc177
Issue #15592. Fix regression: subprocess.communicate() breaks on no input with universal newlines true.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
77243
diff
changeset
|
1629 # This method is called from the _communicate_with_*() methods |
|
9d86480cc177
Issue #15592. Fix regression: subprocess.communicate() breaks on no input with universal newlines true.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
77243
diff
changeset
|
1630 # so that if we time out while communicating, we can continue |
|
9d86480cc177
Issue #15592. Fix regression: subprocess.communicate() breaks on no input with universal newlines true.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
77243
diff
changeset
|
1631 # sending input if we retry. |
|
9d86480cc177
Issue #15592. Fix regression: subprocess.communicate() breaks on no input with universal newlines true.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
77243
diff
changeset
|
1632 if self.stdin and self._input is None: |
|
9d86480cc177
Issue #15592. Fix regression: subprocess.communicate() breaks on no input with universal newlines true.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
77243
diff
changeset
|
1633 self._input_offset = 0 |
|
9d86480cc177
Issue #15592. Fix regression: subprocess.communicate() breaks on no input with universal newlines true.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
77243
diff
changeset
|
1634 self._input = input |
|
9d86480cc177
Issue #15592. Fix regression: subprocess.communicate() breaks on no input with universal newlines true.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
77243
diff
changeset
|
1635 if self.universal_newlines and input is not None: |
|
9d86480cc177
Issue #15592. Fix regression: subprocess.communicate() breaks on no input with universal newlines true.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
77243
diff
changeset
|
1636 self._input = self._input.encode(self.stdin.encoding) |
|
9d86480cc177
Issue #15592. Fix regression: subprocess.communicate() breaks on no input with universal newlines true.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
77243
diff
changeset
|
1637 |
|
9d86480cc177
Issue #15592. Fix regression: subprocess.communicate() breaks on no input with universal newlines true.
Andrew Svetlov <andrew.svetlov@gmail.com>
parents:
77243
diff
changeset
|
1638 |
|
46505
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1639 def send_signal(self, sig): |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1640 """Send a signal to the process |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1641 """ |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1642 os.kill(self.pid, sig) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1643 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1644 def terminate(self): |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1645 """Terminate the process with SIGTERM |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1646 """ |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1647 self.send_signal(signal.SIGTERM) |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1648 |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1649 def kill(self): |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1650 """Kill the process with SIGKILL |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1651 """ |
|
63965327b3ef
Merged revisions 62386-62387,62389-62393,62396,62400-62402,62407,62409-62410,62412-62414,62418-62419 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44810
diff
changeset
|
1652 self.send_signal(signal.SIGKILL) |
