Mercurial > cpython-lru_cache-weakref
annotate Lib/subprocess.py @ 66978:aed2bbafa550 3.1
Blocked revisions 87324 via svnmerge
........
r87324 | r.david.murray | 2010-12-16 14:08:51 -0500 (Thu, 16 Dec 2010) | 9 lines
#10719: restore messages generated on invalid compileall args
Before the introduction of filename arguments to compileall it gave semi useful
messages about not being able to 'list' names that weren't valid directories.
This fix restores that behavior. In addition to the test for this case, the
patch also adds a test for the default behavior of compileall when no arguments
are provided, and fixes a bug in one of the previously added tests.
........
| author | R. David Murray <rdmurray@bitdance.com> |
|---|---|
| date | Thu, 16 Dec 2010 19:10:16 +0000 |
| parents | b066bd0b64e7 |
| children | e9a51d463579 |
| 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 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
28 class Popen(args, bufsize=0, executable=None, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
29 stdin=None, stdout=None, stderr=None, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
30 preexec_fn=None, close_fds=False, shell=False, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
31 cwd=None, env=None, universal_newlines=False, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
32 startupinfo=None, creationflags=0): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
33 |
|
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 Arguments are: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
36 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
37 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
|
38 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
|
39 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
|
40 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
41 On UNIX, with shell=False (default): In this case, the Popen class |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
42 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
|
43 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
|
44 as the only item (the program to execute). |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
45 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
46 On UNIX, with shell=True: If args is a string, it specifies the |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
47 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
|
48 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
|
49 will be treated as additional shell arguments. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
50 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
51 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
|
52 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
|
53 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
|
54 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
|
55 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
|
56 rules as the MS C runtime. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
57 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
58 bufsize, if given, has the same meaning as the corresponding argument |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
59 to the built-in open() function: 0 means unbuffered, 1 means line |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
60 buffered, any other positive value means use a buffer of |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
61 (approximately) that size. A negative bufsize means to use the system |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
62 default, which usually means fully buffered. The default value for |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
63 bufsize is 0 (unbuffered). |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
64 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
65 stdin, stdout and stderr specify the executed programs' standard |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
66 input, standard output and standard error file handles, respectively. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
67 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
|
68 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
|
69 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
|
70 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
|
71 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
|
72 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
|
73 file handle as for stdout. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
74 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
75 If preexec_fn is set to a callable object, this object will be called |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
76 in the child process just before the child is executed. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
77 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
78 If close_fds is true, all file descriptors except 0, 1 and 2 will be |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
79 closed before the child process is executed. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
80 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
81 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
|
82 shell. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
83 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
84 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
|
85 before the child is executed. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
86 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
87 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
|
88 process. |
|
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 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
|
91 opened as a text files, but lines may be terminated by any of '\n', |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
92 the Unix end-of-line convention, '\r', the Macintosh convention or |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
93 '\r\n', the Windows convention. All of these external representations |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
94 are seen as '\n' by the Python program. Note: This feature is only |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
95 available if Python is built with universal newline support (the |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
96 default). Also, the newlines attribute of the file objects stdout, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
97 stdin and stderr are not updated by the communicate() method. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
98 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
99 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
|
100 underlying CreateProcess() function. They can specify things such as |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
101 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
|
102 (Windows only) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
103 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
104 |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
105 This module also defines some shortcut functions: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
106 |
|
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
|
107 call(*popenargs, **kwargs): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
108 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
|
109 return the returncode attribute. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
110 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
111 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
|
112 |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
113 >>> retcode = call(["ls", "-l"]) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
114 |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
115 check_call(*popenargs, **kwargs): |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
116 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
|
117 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
|
118 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
|
119 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
|
120 |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
121 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
|
122 |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
123 >>> check_call(["ls", "-l"]) |
|
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
124 0 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
125 |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
126 getstatusoutput(cmd): |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
127 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
|
128 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
129 Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
130 (status, output). cmd is actually run as '{ cmd ; } 2>&1', so that the |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
131 returned output will contain output or error messages. A trailing newline |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
132 is stripped from the output. The exit status for the command can be |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
133 interpreted according to the rules for the C function wait(). Example: |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
134 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
135 >>> 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
|
136 (0, '/bin/ls') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
137 >>> 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
|
138 (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
|
139 >>> subprocess.getstatusoutput('/bin/junk') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
140 (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
|
141 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
142 getoutput(cmd): |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
143 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
|
144 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
145 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
|
146 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
|
147 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
148 >>> 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
|
149 '/bin/ls' |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
150 |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
151 check_output(*popenargs, **kwargs): |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
152 Run command with arguments and return its output as a byte string. |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
153 |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
154 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
|
155 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
|
156 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
|
157 |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
158 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
|
159 |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
160 >>> 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
|
161 |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
162 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
163 Exceptions |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
164 ---------- |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
165 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
|
166 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
|
167 the exception object will have one extra attribute called |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
168 'child_traceback', which is a string containing traceback information |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
169 from the childs point of view. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
170 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
171 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
|
172 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
|
173 should prepare for OSErrors. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
174 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
175 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
|
176 |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
177 check_call() and check_output() will raise CalledProcessError, if the |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
178 called process returns a non-zero return code. |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
179 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
180 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
181 Security |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
182 -------- |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
183 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
|
184 /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
|
185 metacharacters, can safely be passed to child processes. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
186 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
187 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
188 Popen objects |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
189 ============= |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
190 Instances of the Popen class have the following methods: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
191 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
192 poll() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
193 Check if child process has terminated. Returns returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
194 attribute. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
195 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
196 wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
197 Wait for child process to terminate. Returns returncode attribute. |
|
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 communicate(input=None) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
200 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
|
201 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
|
202 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
|
203 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
|
204 the child. |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
205 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
206 communicate() returns a tuple (stdout, stderr). |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
207 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
208 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
|
209 method if the data size is large or unlimited. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
210 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
211 The following attributes are also available: |
|
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 stdin |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
214 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
|
215 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
|
216 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
217 stdout |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
218 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
|
219 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
|
220 None. |
|
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 stderr |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
223 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
|
224 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
|
225 None. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
226 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
227 pid |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
228 The process ID of the child process. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
229 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
230 returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
231 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
|
232 hasn't terminated yet. A negative value -N indicates that the |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
233 child was terminated by signal N (UNIX only). |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
234 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
235 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
236 Replacing older functions with the subprocess module |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
237 ==================================================== |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
238 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
|
239 for a. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
240 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
241 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
|
242 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
|
243 exception. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
244 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
245 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
|
246 imported with "from subprocess import *". |
|
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 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
249 Replacing /bin/sh shell backquote |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
250 --------------------------------- |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
251 output=`mycmd myarg` |
|
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 output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
254 |
|
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 Replacing shell pipe line |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
257 ------------------------- |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
258 output=`dmesg | grep hda` |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
259 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
260 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
|
261 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
|
262 output = p2.communicate()[0] |
|
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 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
265 Replacing os.system() |
|
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 sts = os.system("mycmd" + " myarg") |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
268 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
269 p = Popen("mycmd" + " myarg", shell=True) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
270 pid, sts = os.waitpid(p.pid, 0) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
271 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
272 Note: |
|
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 * 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
|
275 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
276 * 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
|
277 exitstatus. |
|
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 A more real-world example would look like this: |
|
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 try: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
282 retcode = call("mycmd" + " myarg", shell=True) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
283 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
|
284 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
|
285 else: |
|
41843
1f7891d84d93
Remove native popen() and fdopen(), replacing them with subprocess calls.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
286 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
|
287 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
|
288 print("Execution failed:", e, file=sys.stderr) |
|
33723
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.spawn* |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
292 ------------------- |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
293 P_NOWAIT example: |
|
33723
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 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
|
296 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
297 pid = Popen(["/bin/mycmd", "myarg"]).pid |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
298 |
|
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 P_WAIT example: |
|
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 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
|
303 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
304 retcode = call(["/bin/mycmd", "myarg"]) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
305 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
306 |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
307 Vector example: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
308 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
309 os.spawnvp(os.P_NOWAIT, path, args) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
310 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
311 Popen([path] + args[1:]) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
312 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
313 |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
314 Environment example: |
|
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 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
|
317 ==> |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
318 Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"}) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
319 """ |
|
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 import sys |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
322 mswindows = (sys.platform == "win32") |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
323 |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
324 import io |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
325 import os |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
326 import traceback |
|
44810
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
327 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
|
328 import signal |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
329 |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
330 # Exception classes used by this module. |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
331 class CalledProcessError(Exception): |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
332 """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
|
333 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
|
334 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
|
335 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
|
336 """ |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
337 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
|
338 self.returncode = returncode |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
339 self.cmd = cmd |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
340 self.output = output |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
341 def __str__(self): |
|
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
342 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
|
343 |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
344 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
345 if mswindows: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
346 from _subprocess import CREATE_NEW_CONSOLE |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
347 import threading |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
348 import msvcrt |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
349 import _subprocess |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
350 class STARTUPINFO: |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
351 dwFlags = 0 |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
352 hStdInput = None |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
353 hStdOutput = None |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
354 hStdError = None |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
355 wShowWindow = 0 |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
356 class pywintypes: |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
357 error = IOError |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
358 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
359 import select |
|
55602
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
360 _has_poll = hasattr(select, 'poll') |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
361 import errno |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
362 import fcntl |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
363 import pickle |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
364 |
|
55626
fb5857f903fe
Merged revisions 73917 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55617
diff
changeset
|
365 # 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
|
366 # 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
|
367 # POSIX defines PIPE_BUF as >= 512. |
|
fb5857f903fe
Merged revisions 73917 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55617
diff
changeset
|
368 _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
|
369 |
|
fb5857f903fe
Merged revisions 73917 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
55617
diff
changeset
|
370 |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
371 __all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "getstatusoutput", |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
372 "getoutput", "check_output", "CalledProcessError"] |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
373 |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
374 if mswindows: |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
375 __all__.append("CREATE_NEW_CONSOLE") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
376 try: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
377 MAXFD = os.sysconf("SC_OPEN_MAX") |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
378 except: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
379 MAXFD = 256 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
380 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
381 _active = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
382 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
383 def _cleanup(): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
384 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
|
385 res = inst._internal_poll(_deadstate=sys.maxsize) |
|
39646
ce23d86732b0
Fix another comparison between None and 0.
Guido van Rossum <guido@python.org>
parents:
39442
diff
changeset
|
386 if res is not None and res >= 0: |
|
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
|
387 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
|
388 _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
|
389 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
|
390 # 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
|
391 # 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
|
392 pass |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
393 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
394 PIPE = -1 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
395 STDOUT = -2 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
396 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
397 |
|
59209
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
398 def _eintr_retry_call(func, *args): |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
399 while True: |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
400 try: |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
401 return func(*args) |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
402 except OSError as e: |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
403 if e.errno == errno.EINTR: |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
404 continue |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
405 raise |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
406 |
|
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
407 |
|
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
|
408 def call(*popenargs, **kwargs): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
409 """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
|
410 return the returncode attribute. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
411 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
412 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
|
413 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
414 retcode = call(["ls", "-l"]) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
415 """ |
|
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
|
416 return Popen(*popenargs, **kwargs).wait() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
417 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
418 |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
419 def check_call(*popenargs, **kwargs): |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
420 """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
|
421 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
|
422 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
|
423 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
|
424 |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
425 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
|
426 |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
427 check_call(["ls", "-l"]) |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
428 """ |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
429 retcode = call(*popenargs, **kwargs) |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
430 if retcode: |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
431 cmd = kwargs.get("args") |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
432 if cmd is None: |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
433 cmd = popenargs[0] |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
434 raise CalledProcessError(retcode, cmd) |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
435 return 0 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
436 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
437 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
438 def check_output(*popenargs, **kwargs): |
|
65109
a68f8763555b
Merged revisions 76923,76926,77009,77082-77083,77085,77087,77121 via svnmerge from
Georg Brandl <georg@python.org>
parents:
63930
diff
changeset
|
439 r"""Run command with arguments and return its output as a byte string. |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
440 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
441 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
|
442 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
|
443 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
|
444 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
445 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
|
446 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
447 >>> 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
|
448 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
|
449 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
450 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
|
451 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
|
452 |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
453 >>> 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
|
454 ... "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
|
455 ... 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
|
456 b'ls: non_existent_file: No such file or directory\n' |
|
50074
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
457 """ |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
458 if 'stdout' in kwargs: |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
459 raise ValueError('stdout argument not allowed, it will be overridden.') |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
460 process = Popen(*popenargs, stdout=PIPE, **kwargs) |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
461 output, unused_err = process.communicate() |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
462 retcode = process.poll() |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
463 if retcode: |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
464 cmd = kwargs.get("args") |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
465 if cmd is None: |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
466 cmd = popenargs[0] |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
467 raise CalledProcessError(retcode, cmd, output=output) |
|
024a9897c651
Merged revisions 67511,67536-67537,67543 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48752
diff
changeset
|
468 return output |
|
34302
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
469 |
|
998fb1e1c8e9
New subprocess utility function: check_call. Closes #1071764.
Peter Astrand <astrand@lysator.liu.se>
parents:
34111
diff
changeset
|
470 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
471 def list2cmdline(seq): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
472 """ |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
473 Translate a sequence of arguments into a command line |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
474 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
|
475 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
476 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
|
477 space or a tab. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
478 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
479 2) A string surrounded by double quotation marks is |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
480 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
|
481 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
|
482 argument. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
483 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
484 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
|
485 interpreted as a literal double quotation mark. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
486 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
487 4) Backslashes are interpreted literally, unless they |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
488 immediately precede a double quotation mark. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
489 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
490 5) If backslashes immediately precede a double quotation mark, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
491 every pair of backslashes is interpreted as a literal |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
492 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
|
493 backslash escapes the next double quotation mark as |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
494 described in rule 3. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
495 """ |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
496 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
497 # See |
|
57156
667d9779cad6
Merged revisions 76170 via svnmerge from
Eric Smith <eric@trueblade.com>
parents:
55626
diff
changeset
|
498 # 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
|
499 # or search http://msdn.microsoft.com for |
|
667d9779cad6
Merged revisions 76170 via svnmerge from
Eric Smith <eric@trueblade.com>
parents:
55626
diff
changeset
|
500 # "Parsing C++ Command-Line Arguments" |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
501 result = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
502 needquote = False |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
503 for arg in seq: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
504 bs_buf = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
505 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
506 # 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
|
507 if result: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
508 result.append(' ') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
509 |
|
62404
5de52eb252da
Merged revisions 82076 via svnmerge from
Jean-Paul Calderone <exarkun@divmod.com>
parents:
61585
diff
changeset
|
510 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
|
511 if needquote: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
512 result.append('"') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
513 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
514 for c in arg: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
515 if c == '\\': |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
516 # 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
|
517 bs_buf.append(c) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
518 elif c == '"': |
|
44810
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
519 # Double backslashes. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
520 result.append('\\' * len(bs_buf)*2) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
521 bs_buf = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
522 result.append('\\"') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
523 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
524 # Normal char |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
525 if bs_buf: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
526 result.extend(bs_buf) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
527 bs_buf = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
528 result.append(c) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
529 |
|
44810
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
530 # Add remaining backslashes, if any. |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
531 if bs_buf: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
532 result.extend(bs_buf) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
533 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
534 if needquote: |
|
34675
8f0456425715
Corrected bug in list2cmdline wrt backslashes. Fixes #1083306.
Peter Astrand <astrand@lysator.liu.se>
parents:
34672
diff
changeset
|
535 result.extend(bs_buf) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
536 result.append('"') |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
537 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
538 return ''.join(result) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
539 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
540 |
|
47331
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
541 # 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
|
542 # |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
543 # NB This only works (and is only relevant) for UNIX. |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
544 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
545 def getstatusoutput(cmd): |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
546 """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
|
547 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
548 Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
549 (status, output). cmd is actually run as '{ cmd ; } 2>&1', so that the |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
550 returned output will contain output or error messages. A trailing newline |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
551 is stripped from the output. The exit status for the command can be |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
552 interpreted according to the rules for the C function wait(). Example: |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
553 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
554 >>> import subprocess |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
555 >>> 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
|
556 (0, '/bin/ls') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
557 >>> 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
|
558 (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
|
559 >>> subprocess.getstatusoutput('/bin/junk') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
560 (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
|
561 """ |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
562 pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r') |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
563 text = pipe.read() |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
564 sts = pipe.close() |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
565 if sts is None: sts = 0 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
566 if text[-1:] == '\n': text = text[:-1] |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
567 return sts, text |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
568 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
569 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
570 def getoutput(cmd): |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
571 """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
|
572 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
573 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
|
574 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
|
575 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
576 >>> import subprocess |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
577 >>> 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
|
578 '/bin/ls' |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
579 """ |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
580 return getstatusoutput(cmd)[1] |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
581 |
|
0525cd5b2582
The commands module has been removed. The getoutput() and getstatusoutput()
Brett Cannon <bcannon@gmail.com>
parents:
46505
diff
changeset
|
582 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
583 class Popen(object): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
584 def __init__(self, args, bufsize=0, executable=None, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
585 stdin=None, stdout=None, stderr=None, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
586 preexec_fn=None, close_fds=False, shell=False, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
587 cwd=None, env=None, universal_newlines=False, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
588 startupinfo=None, creationflags=0): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
589 """Create new Popen instance.""" |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
590 _cleanup() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
591 |
|
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
|
592 self._child_created = 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
|
593 if bufsize is None: |
|
e420039368b7
The bufsize argument to Popen() should accept None meaning the default (0).
Guido van Rossum <guido@python.org>
parents:
41969
diff
changeset
|
594 bufsize = 0 # Restore default |
|
41592
1e5a2a2b18ee
Fix various spots where int/long and str/unicode unification
Walter Dörwald <walter@livinglogic.de>
parents:
41554
diff
changeset
|
595 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
|
596 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
|
597 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
598 if mswindows: |
| 33735 | 599 if preexec_fn is not None: |
| 600 raise ValueError("preexec_fn is not supported on Windows " | |
| 601 "platforms") | |
|
41969
9d02a4adf574
Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41845
diff
changeset
|
602 if close_fds and (stdin is not None or stdout is not None or |
|
9d02a4adf574
Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41845
diff
changeset
|
603 stderr is not None): |
| 33735 | 604 raise ValueError("close_fds is not supported on Windows " |
|
41969
9d02a4adf574
Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41845
diff
changeset
|
605 "platforms if you redirect stdin/stdout/stderr") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
606 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
607 # POSIX |
| 33735 | 608 if startupinfo is not None: |
| 609 raise ValueError("startupinfo is only supported on Windows " | |
| 610 "platforms") | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
611 if creationflags != 0: |
| 33735 | 612 raise ValueError("creationflags is only supported on Windows " |
| 613 "platforms") | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
614 |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
615 self.stdin = None |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
616 self.stdout = None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
617 self.stderr = None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
618 self.pid = None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
619 self.returncode = None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
620 self.universal_newlines = universal_newlines |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
621 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
622 # Input and output objects. The general principle is like |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
623 # this: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
624 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
625 # Parent Child |
|
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 # p2cwrite ---stdin---> p2cread |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
628 # c2pread <--stdout--- c2pwrite |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
629 # errread <--stderr--- errwrite |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
630 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
631 # On POSIX, the child objects are file descriptors. On |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
632 # Windows, these are Windows file handles. The parent objects |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
633 # are file descriptors on both platforms. The parent objects |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
634 # are None when not using PIPEs. The child objects are None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
635 # when not redirecting. |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
636 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
637 (p2cread, p2cwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
638 c2pread, c2pwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
639 errread, errwrite) = self._get_handles(stdin, stdout, stderr) |
|
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 self._execute_child(args, executable, preexec_fn, close_fds, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
642 cwd, env, universal_newlines, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
643 startupinfo, creationflags, shell, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
644 p2cread, p2cwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
645 c2pread, c2pwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
646 errread, errwrite) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
647 |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40775
diff
changeset
|
648 if mswindows: |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
649 if p2cwrite is not None: |
|
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
650 p2cwrite = msvcrt.open_osfhandle(p2cwrite.Detach(), 0) |
|
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
651 if c2pread is not None: |
|
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
652 c2pread = msvcrt.open_osfhandle(c2pread.Detach(), 0) |
|
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
653 if errread is not None: |
|
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
654 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
|
655 |
|
41843
1f7891d84d93
Remove native popen() and fdopen(), replacing them with subprocess calls.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
656 if bufsize == 0: |
|
1f7891d84d93
Remove native popen() and fdopen(), replacing them with subprocess calls.
Guido van Rossum <guido@python.org>
parents:
41732
diff
changeset
|
657 bufsize = 1 # Nearly unbuffered (XXX for now) |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40775
diff
changeset
|
658 if p2cwrite is not None: |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
659 self.stdin = io.open(p2cwrite, 'wb', bufsize) |
|
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
660 if self.universal_newlines: |
|
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
661 self.stdin = io.TextIOWrapper(self.stdin) |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40775
diff
changeset
|
662 if c2pread is not None: |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
663 self.stdout = io.open(c2pread, 'rb', bufsize) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
664 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
|
665 self.stdout = io.TextIOWrapper(self.stdout) |
|
40893
32c4897b5d46
Merged revisions 53623-53858 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40775
diff
changeset
|
666 if errread is not None: |
|
41845
9ce8fa0a0899
Make test_subprocess work. Fix universal newlines in io.py.
Guido van Rossum <guido@python.org>
parents:
41843
diff
changeset
|
667 self.stderr = io.open(errread, 'rb', bufsize) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
668 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
|
669 self.stderr = io.TextIOWrapper(self.stderr) |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
670 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
671 |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
672 def _translate_newlines(self, data, encoding): |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
673 data = data.replace(b"\r\n", b"\n").replace(b"\r", b"\n") |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
674 return data.decode(encoding) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
675 |
|
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
|
676 |
| 61569 | 677 def __del__(self, _maxsize=sys.maxsize, _active=_active): |
|
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
|
678 if not self._child_created: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
679 # 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
|
680 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
|
681 # In case the child hasn't been waited on, check if it's done. |
| 61569 | 682 self._internal_poll(_deadstate=_maxsize) |
|
39442
654c380cf8b9
Merged revisions 46753-51188 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
38673
diff
changeset
|
683 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
|
684 # 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
|
685 _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
|
686 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
37048
diff
changeset
|
687 |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
688 def communicate(self, input=None): |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
689 """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
|
690 stdout and stderr, until end-of-file is reached. Wait for |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
691 process to terminate. The optional input argument should be a |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
692 string to be sent to the child process, or None, if no data |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
693 should be sent to the child. |
|
34818
4eaab38566c9
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
34675
diff
changeset
|
694 |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
695 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
|
696 |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
697 # Optimization: If we are only using one pipe, or no pipe at |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
698 # all, using select() or threads is unnecessary. |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
699 if [self.stdin, self.stdout, self.stderr].count(None) >= 2: |
|
34818
4eaab38566c9
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
34675
diff
changeset
|
700 stdout = None |
|
4eaab38566c9
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
34675
diff
changeset
|
701 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
|
702 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
|
703 if input: |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
704 self.stdin.write(input) |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
705 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
|
706 elif self.stdout: |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
707 stdout = 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
|
708 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
|
709 elif self.stderr: |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
710 stderr = 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
|
711 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
|
712 self.wait() |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
713 return (stdout, stderr) |
|
34818
4eaab38566c9
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
34675
diff
changeset
|
714 |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
715 return self._communicate(input) |
|
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
716 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
717 |
|
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
|
718 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
|
719 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
|
720 |
|
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
|
721 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
722 if mswindows: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
723 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
724 # Windows methods |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
725 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
726 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
|
727 """Construct and return tuple with IO objects: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
728 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
729 """ |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
730 if stdin is None and stdout is None and stderr is None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
731 return (None, None, None, None, None, None) |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
732 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
733 p2cread, p2cwrite = None, None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
734 c2pread, c2pwrite = None, None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
735 errread, errwrite = None, None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
736 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
737 if stdin is None: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
738 p2cread = _subprocess.GetStdHandle(_subprocess.STD_INPUT_HANDLE) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
739 if p2cread is None: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
740 p2cread, _ = _subprocess.CreatePipe(None, 0) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
741 elif stdin == PIPE: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
742 p2cread, p2cwrite = _subprocess.CreatePipe(None, 0) |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
743 elif isinstance(stdin, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
744 p2cread = msvcrt.get_osfhandle(stdin) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
745 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
746 # Assuming file-like object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
747 p2cread = msvcrt.get_osfhandle(stdin.fileno()) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
748 p2cread = self._make_inheritable(p2cread) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
749 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
750 if stdout is None: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
751 c2pwrite = _subprocess.GetStdHandle(_subprocess.STD_OUTPUT_HANDLE) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
752 if c2pwrite is None: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
753 _, c2pwrite = _subprocess.CreatePipe(None, 0) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
754 elif stdout == PIPE: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
755 c2pread, c2pwrite = _subprocess.CreatePipe(None, 0) |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
756 elif isinstance(stdout, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
757 c2pwrite = msvcrt.get_osfhandle(stdout) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
758 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
759 # Assuming file-like object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
760 c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
761 c2pwrite = self._make_inheritable(c2pwrite) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
762 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
763 if stderr is None: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
764 errwrite = _subprocess.GetStdHandle(_subprocess.STD_ERROR_HANDLE) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
765 if errwrite is None: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
766 _, errwrite = _subprocess.CreatePipe(None, 0) |
|
51981
d77172eb6fe7
Merged revisions 70137 via svnmerge from
Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>
parents:
51776
diff
changeset
|
767 elif stderr == PIPE: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
768 errread, errwrite = _subprocess.CreatePipe(None, 0) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
769 elif stderr == STDOUT: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
770 errwrite = c2pwrite |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
771 elif isinstance(stderr, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
772 errwrite = msvcrt.get_osfhandle(stderr) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
773 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
774 # Assuming file-like object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
775 errwrite = msvcrt.get_osfhandle(stderr.fileno()) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
776 errwrite = self._make_inheritable(errwrite) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
777 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
778 return (p2cread, p2cwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
779 c2pread, c2pwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
780 errread, errwrite) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
781 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
782 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
783 def _make_inheritable(self, handle): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
784 """Return a duplicate of handle, which is inheritable""" |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
785 return _subprocess.DuplicateHandle(_subprocess.GetCurrentProcess(), |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
786 handle, _subprocess.GetCurrentProcess(), 0, 1, |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
787 _subprocess.DUPLICATE_SAME_ACCESS) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
788 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
789 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
790 def _find_w9xpopen(self): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
791 """Find and return absolut path to w9xpopen.exe""" |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
792 w9xpopen = os.path.join( |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
793 os.path.dirname(_subprocess.GetModuleFileName(0)), |
| 33735 | 794 "w9xpopen.exe") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
795 if not os.path.exists(w9xpopen): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
796 # Eeek - file-not-found - possibly an embedding |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
797 # situation - see if we can locate it in sys.exec_prefix |
| 33735 | 798 w9xpopen = os.path.join(os.path.dirname(sys.exec_prefix), |
| 799 "w9xpopen.exe") | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
800 if not os.path.exists(w9xpopen): |
| 33735 | 801 raise RuntimeError("Cannot locate w9xpopen.exe, which is " |
| 802 "needed for Popen to work with your " | |
| 803 "shell or platform.") | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
804 return w9xpopen |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
805 |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
806 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
807 def _execute_child(self, args, executable, preexec_fn, close_fds, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
808 cwd, env, universal_newlines, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
809 startupinfo, creationflags, shell, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
810 p2cread, p2cwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
811 c2pread, c2pwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
812 errread, errwrite): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
813 """Execute program (MS Windows version)""" |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
814 |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43487
diff
changeset
|
815 if not isinstance(args, str): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
816 args = list2cmdline(args) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
817 |
|
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
|
818 # Process startup details |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
819 if startupinfo is None: |
|
38673
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
820 startupinfo = STARTUPINFO() |
|
a19c20c5e5c7
Merge the rest of the trunk.
Thomas Wouters <thomas@python.org>
parents:
38453
diff
changeset
|
821 if None not in (p2cread, c2pwrite, errwrite): |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
822 startupinfo.dwFlags |= _subprocess.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
|
823 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
|
824 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
|
825 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
|
826 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
827 if shell: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
828 startupinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
829 startupinfo.wShowWindow = _subprocess.SW_HIDE |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
830 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
|
831 args = '{} /c "{}"'.format (comspec, args) |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
832 if (_subprocess.GetVersion() >= 0x80000000 or |
| 33735 | 833 os.path.basename(comspec).lower() == "command.com"): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
834 # Win9x, or using command.com on NT. We need to |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
835 # use the w9xpopen intermediate program. For more |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
836 # information, see KB Q150956 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
837 # (http://web.archive.org/web/20011105084002/http://support.microsoft.com/support/kb/articles/Q150/9/56.asp) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
838 w9xpopen = self._find_w9xpopen() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
839 args = '"%s" %s' % (w9xpopen, args) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
840 # Not passing CREATE_NEW_CONSOLE has been known to |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
841 # cause random failures on win9x. Specifically a |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
842 # dialog: "Your program accessed mem currently in |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
843 # use at xxx" and a hopeful warning about the |
|
51776
d06a3ebf306f
Merged revisions 69846 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
51721
diff
changeset
|
844 # stability of your system. Cost is Ctrl+C won't |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
845 # kill children. |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
846 creationflags |= _subprocess.CREATE_NEW_CONSOLE |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
847 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
848 # Start the process |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
849 try: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
850 hp, ht, pid, tid = _subprocess.CreateProcess(executable, args, |
| 33735 | 851 # no special security |
| 852 None, None, | |
|
41969
9d02a4adf574
Merged revisions 55631-55794 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
41845
diff
changeset
|
853 int(not close_fds), |
| 33735 | 854 creationflags, |
| 855 env, | |
| 856 cwd, | |
| 857 startupinfo) | |
|
40587
6b18a095c2e7
SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents:
40582
diff
changeset
|
858 except pywintypes.error as e: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
859 # Translate pywintypes.error to WindowsError, which is |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
860 # a subclass of OSError. FIXME: We should really |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
861 # translate errno using _sys_errlist (or simliar), but |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
862 # how can this be done from Python? |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
863 raise WindowsError(*e.args) |
|
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
|
864 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
|
865 # 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
|
866 # 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
|
867 # 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
|
868 # 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
|
869 # 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
|
870 # ReadFile will hang. |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
871 if p2cread is not None: |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
872 p2cread.Close() |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
873 if c2pwrite is not None: |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
874 c2pwrite.Close() |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
875 if errwrite is not None: |
|
f4d92c6d4d42
Issue #3210: Revert C module changes and apply patch from Hirokazu Yamamoto instead
Tim Golden <mail@timgolden.me.uk>
parents:
63095
diff
changeset
|
876 errwrite.Close() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
877 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
878 # 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
|
879 self._child_created = True |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
880 self._handle = hp |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
881 self.pid = pid |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
882 ht.Close() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
883 |
| 61569 | 884 def _internal_poll(self, _deadstate=None, |
|
61585
0e37a95cdcfb
Merged revisions 81181 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61569
diff
changeset
|
885 _WaitForSingleObject=_subprocess.WaitForSingleObject, |
|
0e37a95cdcfb
Merged revisions 81181 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61569
diff
changeset
|
886 _WAIT_OBJECT_0=_subprocess.WAIT_OBJECT_0, |
|
0e37a95cdcfb
Merged revisions 81181 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61569
diff
changeset
|
887 _GetExitCodeProcess=_subprocess.GetExitCodeProcess): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
888 """Check if child process has terminated. Returns returncode |
| 61569 | 889 attribute. |
| 890 | |
| 891 This method is called by __del__, so it can only refer to objects | |
| 892 in its local scope. | |
| 893 | |
| 894 """ | |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
895 if self.returncode is None: |
| 61569 | 896 if _WaitForSingleObject(self._handle, 0) == _WAIT_OBJECT_0: |
| 897 self.returncode = _GetExitCodeProcess(self._handle) | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
898 return self.returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
899 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
900 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
901 def wait(self): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
902 """Wait for child process to terminate. Returns returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
903 attribute.""" |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
904 if self.returncode is None: |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
905 _subprocess.WaitForSingleObject(self._handle, |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
906 _subprocess.INFINITE) |
|
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
907 self.returncode = _subprocess.GetExitCodeProcess(self._handle) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
908 return self.returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
909 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
910 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
911 def _readerthread(self, fh, buffer): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
912 buffer.append(fh.read()) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
913 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
914 |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
915 def _communicate(self, input): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
916 stdout = None # Return |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
917 stderr = None # Return |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
918 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
919 if self.stdout: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
920 stdout = [] |
| 33735 | 921 stdout_thread = threading.Thread(target=self._readerthread, |
| 922 args=(self.stdout, stdout)) | |
|
48752
8d88350553c3
fix set_daemon usage in subprocess
Benjamin Peterson <benjamin@python.org>
parents:
48680
diff
changeset
|
923 stdout_thread.daemon = True |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
924 stdout_thread.start() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
925 if self.stderr: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
926 stderr = [] |
| 33735 | 927 stderr_thread = threading.Thread(target=self._readerthread, |
| 928 args=(self.stderr, stderr)) | |
|
48752
8d88350553c3
fix set_daemon usage in subprocess
Benjamin Peterson <benjamin@python.org>
parents:
48680
diff
changeset
|
929 stderr_thread.daemon = True |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
930 stderr_thread.start() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
931 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
932 if self.stdin: |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
933 if input is not None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
934 self.stdin.write(input) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
935 self.stdin.close() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
936 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
937 if self.stdout: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
938 stdout_thread.join() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
939 if self.stderr: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
940 stderr_thread.join() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
941 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
942 # All data exchanged. Translate lists into strings. |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
943 if stdout is not None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
944 stdout = stdout[0] |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
945 if stderr is not None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
946 stderr = stderr[0] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
947 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
948 self.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
949 return (stdout, stderr) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
950 |
|
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
|
951 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
|
952 """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
|
953 """ |
|
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
|
954 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
|
955 self.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
|
956 else: |
|
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
|
957 raise ValueError("Only SIGTERM is supported on Windows") |
|
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
|
958 |
|
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
|
959 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
|
960 """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
|
961 """ |
|
60923
91f9168aadd0
Merged revisions 80441 via svnmerge from
Brian Curtin <brian.curtin@gmail.com>
parents:
59209
diff
changeset
|
962 _subprocess.TerminateProcess(self._handle, 1) |
|
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
|
963 |
|
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
|
964 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
|
965 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
966 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
967 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
968 # POSIX methods |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
969 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
970 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
|
971 """Construct and return tuple with IO objects: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
972 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
973 """ |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
974 p2cread, p2cwrite = None, None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
975 c2pread, c2pwrite = None, None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
976 errread, errwrite = None, None |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
977 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
978 if stdin is None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
979 pass |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
980 elif stdin == PIPE: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
981 p2cread, p2cwrite = os.pipe() |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
982 elif isinstance(stdin, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
983 p2cread = stdin |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
984 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
985 # Assuming file-like object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
986 p2cread = stdin.fileno() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
987 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
988 if stdout is None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
989 pass |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
990 elif stdout == PIPE: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
991 c2pread, c2pwrite = os.pipe() |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
992 elif isinstance(stdout, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
993 c2pwrite = stdout |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
994 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
995 # Assuming file-like object |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
996 c2pwrite = stdout.fileno() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
997 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
998 if stderr is None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
999 pass |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1000 elif stderr == PIPE: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1001 errread, errwrite = os.pipe() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1002 elif stderr == STDOUT: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1003 errwrite = c2pwrite |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1004 elif isinstance(stderr, int): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1005 errwrite = stderr |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1006 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1007 # Assuming file-like object |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1008 errwrite = stderr.fileno() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1009 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1010 return (p2cread, p2cwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1011 c2pread, c2pwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1012 errread, errwrite) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1013 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1014 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1015 def _set_cloexec_flag(self, fd): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1016 try: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1017 cloexec_flag = fcntl.FD_CLOEXEC |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1018 except AttributeError: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1019 cloexec_flag = 1 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1020 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1021 old = fcntl.fcntl(fd, fcntl.F_GETFD) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1022 fcntl.fcntl(fd, fcntl.F_SETFD, old | cloexec_flag) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1023 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1024 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1025 def _close_fds(self, but): |
|
44810
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
1026 os.closerange(3, but) |
|
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
1027 os.closerange(but + 1, MAXFD) |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
1028 |
|
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
1029 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1030 def _execute_child(self, args, executable, preexec_fn, close_fds, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1031 cwd, env, universal_newlines, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1032 startupinfo, creationflags, shell, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1033 p2cread, p2cwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1034 c2pread, c2pwrite, |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1035 errread, errwrite): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1036 """Execute program (POSIX version)""" |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1037 |
|
43577
ace45b361e87
Patch# 1258 by Christian Heimes: kill basestring.
Guido van Rossum <guido@python.org>
parents:
43487
diff
changeset
|
1038 if isinstance(args, str): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1039 args = [args] |
|
40450
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39646
diff
changeset
|
1040 else: |
|
cc992d75d5b3
Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents:
39646
diff
changeset
|
1041 args = list(args) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1042 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1043 if shell: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1044 args = ["/bin/sh", "-c"] + args |
|
63095
ad66eff9800b
Merged revisions 82971 via svnmerge from
Stefan Krah <stefan@bytereef.org>
parents:
62404
diff
changeset
|
1045 if executable: |
|
ad66eff9800b
Merged revisions 82971 via svnmerge from
Stefan Krah <stefan@bytereef.org>
parents:
62404
diff
changeset
|
1046 args[0] = executable |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1047 |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1048 if executable is None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1049 executable = args[0] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1050 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1051 # For transferring possible exec failure from child to parent |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1052 # The first char specifies the exception type: 0 means |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1053 # OSError, 1 means some other error. |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1054 errpipe_read, errpipe_write = os.pipe() |
|
44810
fa6cee14dcba
Merged revisions 60094-60123 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
44160
diff
changeset
|
1055 try: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1056 try: |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1057 self._set_cloexec_flag(errpipe_write) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1058 |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1059 gc_was_enabled = gc.isenabled() |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1060 # Disable gc to avoid bug where gc -> file_dealloc -> |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1061 # write to stderr -> hang. http://bugs.python.org/issue1336 |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1062 gc.disable() |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1063 try: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1064 self.pid = os.fork() |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1065 except: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1066 if gc_was_enabled: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1067 gc.enable() |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1068 raise |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1069 self._child_created = True |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1070 if self.pid == 0: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1071 # Child |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1072 try: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1073 # Close parent's pipe ends |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1074 if p2cwrite is not None: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1075 os.close(p2cwrite) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1076 if c2pread is not None: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1077 os.close(c2pread) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1078 if errread is not None: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1079 os.close(errread) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1080 os.close(errpipe_read) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1081 |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1082 # Dup fds for child |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1083 if p2cread is not None: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1084 os.dup2(p2cread, 0) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1085 if c2pwrite is not None: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1086 os.dup2(c2pwrite, 1) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1087 if errwrite is not None: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1088 os.dup2(errwrite, 2) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1089 |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1090 # Close pipe fds. Make sure we don't close the |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1091 # same fd more than once, or standard fds. |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1092 if p2cread is not None and p2cread not in (0,): |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1093 os.close(p2cread) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1094 if c2pwrite is not None and \ |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1095 c2pwrite not in (p2cread, 1): |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1096 os.close(c2pwrite) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1097 if (errwrite is not None and |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1098 errwrite not in (p2cread, c2pwrite, 2)): |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1099 os.close(errwrite) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1100 |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1101 # Close all other fds, if asked for |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1102 if close_fds: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1103 self._close_fds(but=errpipe_write) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1104 |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1105 if cwd is not None: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1106 os.chdir(cwd) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1107 |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1108 if preexec_fn: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1109 preexec_fn() |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1110 |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1111 if env is None: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1112 os.execvp(executable, args) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1113 else: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1114 os.execvpe(executable, args, env) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1115 |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1116 except: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1117 exc_type, exc_value, tb = sys.exc_info() |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1118 # Save the traceback and attach it to the exception |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1119 # object |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1120 exc_lines = traceback.format_exception(exc_type, |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1121 exc_value, |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1122 tb) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1123 exc_value.child_traceback = ''.join(exc_lines) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1124 os.write(errpipe_write, pickle.dumps(exc_value)) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1125 |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1126 # This exitcode won't be reported to applications, so |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1127 # it really doesn't matter what we return. |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1128 os._exit(255) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1129 |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1130 # Parent |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1131 if gc_was_enabled: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1132 gc.enable() |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1133 finally: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1134 # 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
|
1135 os.close(errpipe_write) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1136 |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1137 if p2cread is not None and p2cwrite is not None: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1138 os.close(p2cread) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1139 if c2pwrite is not None and c2pread is not None: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1140 os.close(c2pwrite) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1141 if errwrite is not None and errread is not None: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1142 os.close(errwrite) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1143 |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1144 # Wait for exec to fail or succeed; possibly raising an |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1145 # exception (limited to 1 MB) |
|
59209
1f158238fa76
Merged revisions 78524 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
57156
diff
changeset
|
1146 data = _eintr_retry_call(os.read, errpipe_read, 1048576) |
|
54797
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1147 finally: |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1148 # 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
|
1149 os.close(errpipe_read) |
|
5fafcb32f062
Issue #6274. Fixed a potential FD leak in subprocess.py.
Facundo Batista <facundobatista@gmail.com>
parents:
51981
diff
changeset
|
1150 |
| 41731 | 1151 if data: |
|
66895
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1152 try: |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1153 _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
|
1154 except OSError as e: |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1155 if e.errno != errno.ECHILD: |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1156 raise |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1157 child_exception = pickle.loads(data) |
|
51721
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
51657
diff
changeset
|
1158 for fd in (p2cwrite, c2pread, errread): |
|
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
51657
diff
changeset
|
1159 if fd is not None: |
|
33d5d7daa8c7
Merged revisions 69576,69579-69580,69589,69619-69620,69633,69703-69704,69728-69730 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
51657
diff
changeset
|
1160 os.close(fd) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1161 raise child_exception |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1162 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1163 |
| 61569 | 1164 def _handle_exitstatus(self, sts, _WIFSIGNALED=os.WIFSIGNALED, |
| 1165 _WTERMSIG=os.WTERMSIG, _WIFEXITED=os.WIFEXITED, | |
| 1166 _WEXITSTATUS=os.WEXITSTATUS): | |
| 1167 # This method is called (indirectly) by __del__, so it cannot | |
| 1168 # refer to anything outside of its local scope.""" | |
| 1169 if _WIFSIGNALED(sts): | |
| 1170 self.returncode = -_WTERMSIG(sts) | |
| 1171 elif _WIFEXITED(sts): | |
| 1172 self.returncode = _WEXITSTATUS(sts) | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1173 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1174 # Should never happen |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1175 raise RuntimeError("Unknown child exit status!") |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1176 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1177 |
| 61569 | 1178 def _internal_poll(self, _deadstate=None, _waitpid=os.waitpid, |
| 1179 _WNOHANG=os.WNOHANG, _os_error=os.error): | |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1180 """Check if child process has terminated. Returns returncode |
| 61569 | 1181 attribute. |
| 1182 | |
| 1183 This method is called by __del__, so it cannot reference anything | |
| 1184 outside of the local scope (nor can any methods it calls). | |
| 1185 | |
| 1186 """ | |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1187 if self.returncode is None: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1188 try: |
| 61569 | 1189 pid, sts = _waitpid(self.pid, _WNOHANG) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1190 if pid == self.pid: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1191 self._handle_exitstatus(sts) |
| 61569 | 1192 except _os_error: |
|
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
|
1193 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
|
1194 self.returncode = _deadstate |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1195 return self.returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1196 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1197 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1198 def wait(self): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1199 """Wait for child process to terminate. Returns returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1200 attribute.""" |
|
34575
4545a154fac1
Patch from Leandro Lucarella: replaced:
Peter Astrand <astrand@lysator.liu.se>
parents:
34551
diff
changeset
|
1201 if self.returncode is None: |
|
66895
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1202 try: |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1203 pid, sts = _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
|
1204 except OSError as e: |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1205 if e.errno != errno.ECHILD: |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1206 raise |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1207 # This happens if SIGCLD is set to be ignored or waiting |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1208 # for child processes has otherwise been disabled for our |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1209 # process. This child is dead, we can't get the status. |
|
b066bd0b64e7
Merged revisions 87233 via svnmerge from
Gregory P. Smith <greg@mad-scientist.com>
parents:
65109
diff
changeset
|
1210 sts = 0 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1211 self._handle_exitstatus(sts) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1212 return self.returncode |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1213 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1214 |
|
34672
085bc27f92b7
Optimization for communicate(): If only one of stdin/stdout/stderr is
Peter Astrand <astrand@lysator.liu.se>
parents:
34624
diff
changeset
|
1215 def _communicate(self, input): |
|
55602
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1216 if self.stdin: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1217 # 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
|
1218 # 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
|
1219 self.stdin.flush() |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1220 if not input: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1221 self.stdin.close() |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1222 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1223 if _has_poll: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1224 stdout, stderr = self._communicate_with_poll(input) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1225 else: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1226 stdout, stderr = self._communicate_with_select(input) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1227 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1228 # 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
|
1229 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
|
1230 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
|
1231 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
|
1232 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
|
1233 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1234 # 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
|
1235 # 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
|
1236 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
|
1237 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
|
1238 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
|
1239 self.stdout.encoding) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1240 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
|
1241 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
|
1242 self.stderr.encoding) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1243 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1244 self.wait() |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1245 return (stdout, stderr) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1246 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1247 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1248 def _communicate_with_poll(self, input): |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1249 stdout = None # Return |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1250 stderr = None # Return |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1251 fd2file = {} |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1252 fd2output = {} |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1253 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1254 poller = select.poll() |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1255 def register_and_append(file_obj, eventmask): |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1256 poller.register(file_obj.fileno(), eventmask) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1257 fd2file[file_obj.fileno()] = file_obj |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1258 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1259 def close_unregister_and_remove(fd): |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1260 poller.unregister(fd) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1261 fd2file[fd].close() |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1262 fd2file.pop(fd) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1263 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1264 if self.stdin and input: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1265 register_and_append(self.stdin, select.POLLOUT) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1266 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1267 select_POLLIN_POLLPRI = select.POLLIN | select.POLLPRI |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1268 if self.stdout: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1269 register_and_append(self.stdout, select_POLLIN_POLLPRI) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1270 fd2output[self.stdout.fileno()] = stdout = [] |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1271 if self.stderr: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1272 register_and_append(self.stderr, select_POLLIN_POLLPRI) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1273 fd2output[self.stderr.fileno()] = stderr = [] |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1274 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1275 input_offset = 0 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1276 while fd2file: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1277 try: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1278 ready = poller.poll() |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1279 except select.error as e: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1280 if e.args[0] == errno.EINTR: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1281 continue |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1282 raise |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1283 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1284 # XXX Rewrite these to use non-blocking I/O on the |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1285 # file objects; they are no longer using C stdio! |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1286 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1287 for fd, mode in ready: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1288 if mode & select.POLLOUT: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1289 chunk = input[input_offset : input_offset + _PIPE_BUF] |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1290 input_offset += os.write(fd, chunk) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1291 if input_offset >= len(input): |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1292 close_unregister_and_remove(fd) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1293 elif mode & select_POLLIN_POLLPRI: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1294 data = os.read(fd, 4096) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1295 if not data: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1296 close_unregister_and_remove(fd) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1297 fd2output[fd].append(data) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1298 else: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1299 # Ignore hang up or errors. |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1300 close_unregister_and_remove(fd) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1301 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1302 return (stdout, stderr) |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1303 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1304 |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1305 def _communicate_with_select(self, input): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1306 read_set = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1307 write_set = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1308 stdout = None # Return |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1309 stderr = None # Return |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1310 |
|
55602
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1311 if self.stdin and input: |
|
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1312 write_set.append(self.stdin) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1313 if self.stdout: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1314 read_set.append(self.stdout) |
|
33731
53c468d0955b
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
33727
diff
changeset
|
1315 stdout = [] |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1316 if self.stderr: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1317 read_set.append(self.stderr) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1318 stderr = [] |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1319 |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
1320 input_offset = 0 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1321 while read_set or write_set: |
|
48494
aca5b2e6a66f
Merged revisions 64623,64640,64665,64687,64689-64690,64719,64721,64735,64742,64744-64746,64756-64761,64767-64769,64771-64772,64774-64775,64788,64793,64835-64836 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48395
diff
changeset
|
1322 try: |
|
aca5b2e6a66f
Merged revisions 64623,64640,64665,64687,64689-64690,64719,64721,64735,64742,64744-64746,64756-64761,64767-64769,64771-64772,64774-64775,64788,64793,64835-64836 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48395
diff
changeset
|
1323 rlist, wlist, xlist = select.select(read_set, write_set, []) |
|
aca5b2e6a66f
Merged revisions 64623,64640,64665,64687,64689-64690,64719,64721,64735,64742,64744-64746,64756-64761,64767-64769,64771-64772,64774-64775,64788,64793,64835-64836 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48395
diff
changeset
|
1324 except select.error as e: |
|
aca5b2e6a66f
Merged revisions 64623,64640,64665,64687,64689-64690,64719,64721,64735,64742,64744-64746,64756-64761,64767-64769,64771-64772,64774-64775,64788,64793,64835-64836 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48395
diff
changeset
|
1325 if e.args[0] == errno.EINTR: |
|
aca5b2e6a66f
Merged revisions 64623,64640,64665,64687,64689-64690,64719,64721,64735,64742,64744-64746,64756-64761,64767-64769,64771-64772,64774-64775,64788,64793,64835-64836 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48395
diff
changeset
|
1326 continue |
|
aca5b2e6a66f
Merged revisions 64623,64640,64665,64687,64689-64690,64719,64721,64735,64742,64744-64746,64756-64761,64767-64769,64771-64772,64774-64775,64788,64793,64835-64836 via svnmerge from
Georg Brandl <georg@python.org>
parents:
48395
diff
changeset
|
1327 raise |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1328 |
|
43777
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
1329 # XXX Rewrite these to use non-blocking I/O on the |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
1330 # file objects; they are no longer using C stdio! |
|
0d462d789b18
Merging the py3k-pep3137 branch back into the py3k branch.
Guido van Rossum <guido@python.org>
parents:
43684
diff
changeset
|
1331 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1332 if self.stdin in wlist: |
|
55602
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1333 chunk = input[input_offset : input_offset + _PIPE_BUF] |
|
43487
8c10aac37037
Breaking ground for PEP 3137 implementation:
Guido van Rossum <guido@python.org>
parents:
42927
diff
changeset
|
1334 bytes_written = os.write(self.stdin.fileno(), chunk) |
|
40742
f1701ba2452b
Merged revisions 53538-53622 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40644
diff
changeset
|
1335 input_offset += bytes_written |
|
40582
67287ca4e1e8
Merged revisions 53005-53303 via svnmerge from
Thomas Wouters <thomas@python.org>
parents:
40450
diff
changeset
|
1336 if input_offset >= len(input): |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1337 self.stdin.close() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1338 write_set.remove(self.stdin) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1339 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1340 if self.stdout in rlist: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1341 data = os.read(self.stdout.fileno(), 1024) |
|
41732
bbb099d4ec80
Make test_subprocess pass. The subprocess module now reads and writes
Guido van Rossum <guido@python.org>
parents:
41731
diff
changeset
|
1342 if not data: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1343 self.stdout.close() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1344 read_set.remove(self.stdout) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1345 stdout.append(data) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1346 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1347 if self.stderr in rlist: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1348 data = os.read(self.stderr.fileno(), 1024) |
|
41732
bbb099d4ec80
Make test_subprocess pass. The subprocess module now reads and writes
Guido van Rossum <guido@python.org>
parents:
41731
diff
changeset
|
1349 if not data: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1350 self.stderr.close() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1351 read_set.remove(self.stderr) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1352 stderr.append(data) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1353 |
|
55602
680ad8eed33b
Merged revisions 73833,73838,73850-73852,73856-73857 via svnmerge from
Georg Brandl <georg@python.org>
parents:
54797
diff
changeset
|
1354 return (stdout, stderr) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1355 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1356 |
|
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
|
1357 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
|
1358 """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
|
1359 """ |
|
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
|
1360 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
|
1361 |
|
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
|
1362 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
|
1363 """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
|
1364 """ |
|
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
|
1365 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
|
1366 |
|
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
|
1367 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
|
1368 """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
|
1369 """ |
|
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
|
1370 self.send_signal(signal.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
|
1371 |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1372 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1373 def _demo_posix(): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1374 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1375 # Example 1: Simple redirection: Get process list |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1376 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1377 plist = Popen(["ps"], stdout=PIPE).communicate()[0] |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1378 print("Process list:") |
|
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1379 print(plist) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1380 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1381 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1382 # Example 2: Change uid before executing child |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1383 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1384 if os.getuid() == 0: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1385 p = Popen(["id"], preexec_fn=lambda: os.setuid(100)) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1386 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1387 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1388 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1389 # Example 3: Connecting several subprocesses |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1390 # |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1391 print("Looking for 'hda'...") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1392 p1 = Popen(["dmesg"], stdout=PIPE) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1393 p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1394 print(repr(p2.communicate()[0])) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1395 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1396 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1397 # Example 4: Catch execution error |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1398 # |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1399 print() |
|
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1400 print("Trying a weird file...") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1401 try: |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1402 print(Popen(["/this/path/does/not/exist"]).communicate()) |
|
40587
6b18a095c2e7
SF patch 1631942 by Collin Winter:
Guido van Rossum <guido@python.org>
parents:
40582
diff
changeset
|
1403 except OSError as e: |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1404 if e.errno == errno.ENOENT: |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1405 print("The file didn't exist. I thought so...") |
|
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1406 print("Child traceback:") |
|
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1407 print(e.child_traceback) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1408 else: |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1409 print("Error", e.errno) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1410 else: |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1411 print("Gosh. No error.", file=sys.stderr) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1412 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1413 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1414 def _demo_windows(): |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1415 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1416 # Example 1: Connecting several subprocesses |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1417 # |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1418 print("Looking for 'PROMPT' in set output...") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1419 p1 = Popen("set", stdout=PIPE, shell=True) |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1420 p2 = Popen('find "PROMPT"', stdin=p1.stdout, stdout=PIPE) |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1421 print(repr(p2.communicate()[0])) |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1422 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1423 # |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1424 # Example 2: Simple execution of program |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1425 # |
|
40775
4cdf21a0dbbc
Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents:
40742
diff
changeset
|
1426 print("Executing calc...") |
|
33723
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1427 p = Popen("calc") |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1428 p.wait() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1429 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1430 |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1431 if __name__ == "__main__": |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1432 if mswindows: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1433 _demo_windows() |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1434 else: |
|
76641824cf05
Added Peter Astrand's subprocess module.
Fredrik Lundh <fredrik@pythonware.com>
parents:
diff
changeset
|
1435 _demo_posix() |
