1 # Stubs for subprocess
\r
3 # Based on http://docs.python.org/3.6/library/subprocess.html
\r
5 from typing import Sequence, Any, Mapping, Callable, Tuple, IO, Optional, Union, List, Type, Text
\r
6 from types import TracebackType
\r
8 # We prefer to annotate inputs to methods (eg subprocess.check_call) with these
\r
9 # union types. However, outputs (eg check_call return) and class attributes
\r
10 # (eg TimeoutError.cmd) we prefer to annotate with Any, so the caller does not
\r
11 # have to use an assertion to confirm which type.
\r
16 # x = subprocess.check_output(["ls", "-l"])
\r
17 # reveal_type(x) # Any, but morally is _TXT
\r
18 # except TimeoutError as e:
\r
19 # reveal_type(e.cmd) # Any, but morally is _CMD
\r
20 _FILE = Union[None, int, IO[Any]]
\r
21 _TXT = Union[bytes, Text]
\r
22 if sys.version_info >= (3, 6):
\r
23 from builtins import _PathLike
\r
24 _PATH = Union[bytes, Text, _PathLike]
\r
26 _PATH = Union[bytes, Text]
\r
27 # Python 3.6 does't support _CMD being a single PathLike.
\r
28 # See: https://bugs.python.org/issue31961
\r
29 _CMD = Union[_TXT, Sequence[_PATH]]
\r
30 _ENV = Union[Mapping[bytes, _TXT], Mapping[Text, _TXT]]
\r
32 if sys.version_info >= (3, 5):
\r
33 class CompletedProcess:
\r
35 args = ... # type: Any
\r
36 returncode = ... # type: int
\r
37 # morally: Optional[_TXT]
\r
38 stdout = ... # type: Any
\r
39 stderr = ... # type: Any
\r
40 def __init__(self, args: _CMD,
\r
42 stdout: Optional[_TXT] = ...,
\r
43 stderr: Optional[_TXT] = ...) -> None: ...
\r
44 def check_returncode(self) -> None: ...
\r
46 if sys.version_info >= (3, 6):
\r
47 # Nearly same args as Popen.__init__ except for timeout, input, and check
\r
49 timeout: Optional[float] = ...,
\r
50 input: Optional[_TXT] = ...,
\r
53 executable: _PATH = ...,
\r
55 stdout: _FILE = ...,
\r
56 stderr: _FILE = ...,
\r
57 preexec_fn: Callable[[], Any] = ...,
\r
58 close_fds: bool = ...,
\r
60 cwd: Optional[_PATH] = ...,
\r
61 env: Optional[_ENV] = ...,
\r
62 universal_newlines: bool = ...,
\r
63 startupinfo: Any = ...,
\r
64 creationflags: int = ...,
\r
65 restore_signals: bool = ...,
\r
66 start_new_session: bool = ...,
\r
67 pass_fds: Any = ...,
\r
69 encoding: Optional[str] = ...,
\r
70 errors: Optional[str] = ...) -> CompletedProcess: ...
\r
72 # Nearly same args as Popen.__init__ except for timeout, input, and check
\r
74 timeout: Optional[float] = ...,
\r
75 input: Optional[_TXT] = ...,
\r
78 executable: _PATH = ...,
\r
80 stdout: _FILE = ...,
\r
81 stderr: _FILE = ...,
\r
82 preexec_fn: Callable[[], Any] = ...,
\r
83 close_fds: bool = ...,
\r
85 cwd: Optional[_PATH] = ...,
\r
86 env: Optional[_ENV] = ...,
\r
87 universal_newlines: bool = ...,
\r
88 startupinfo: Any = ...,
\r
89 creationflags: int = ...,
\r
90 restore_signals: bool = ...,
\r
91 start_new_session: bool = ...,
\r
92 pass_fds: Any = ...) -> CompletedProcess: ...
\r
94 # Same args as Popen.__init__
\r
95 def call(args: _CMD,
\r
97 executable: _PATH = ...,
\r
99 stdout: _FILE = ...,
\r
100 stderr: _FILE = ...,
\r
101 preexec_fn: Callable[[], Any] = ...,
\r
102 close_fds: bool = ...,
\r
104 cwd: Optional[_PATH] = ...,
\r
105 env: Optional[_ENV] = ...,
\r
106 universal_newlines: bool = ...,
\r
107 startupinfo: Any = ...,
\r
108 creationflags: int = ...,
\r
109 restore_signals: bool = ...,
\r
110 start_new_session: bool = ...,
\r
111 pass_fds: Any = ...,
\r
112 timeout: float = ...) -> int: ...
\r
114 # Same args as Popen.__init__
\r
115 def check_call(args: _CMD,
\r
116 bufsize: int = ...,
\r
117 executable: _PATH = ...,
\r
118 stdin: _FILE = ...,
\r
119 stdout: _FILE = ...,
\r
120 stderr: _FILE = ...,
\r
121 preexec_fn: Callable[[], Any] = ...,
\r
122 close_fds: bool = ...,
\r
124 cwd: Optional[_PATH] = ...,
\r
125 env: Optional[_ENV] = ...,
\r
126 universal_newlines: bool = ...,
\r
127 startupinfo: Any = ...,
\r
128 creationflags: int = ...,
\r
129 restore_signals: bool = ...,
\r
130 start_new_session: bool = ...,
\r
131 pass_fds: Any = ...,
\r
132 timeout: float = ...) -> int: ...
\r
134 if sys.version_info >= (3, 6):
\r
135 # 3.6 added encoding and errors
\r
136 def check_output(args: _CMD,
\r
137 bufsize: int = ...,
\r
138 executable: _PATH = ...,
\r
139 stdin: _FILE = ...,
\r
140 stderr: _FILE = ...,
\r
141 preexec_fn: Callable[[], Any] = ...,
\r
142 close_fds: bool = ...,
\r
144 cwd: Optional[_PATH] = ...,
\r
145 env: Optional[_ENV] = ...,
\r
146 universal_newlines: bool = ...,
\r
147 startupinfo: Any = ...,
\r
148 creationflags: int = ...,
\r
149 restore_signals: bool = ...,
\r
150 start_new_session: bool = ...,
\r
151 pass_fds: Any = ...,
\r
153 timeout: float = ...,
\r
155 encoding: Optional[str] = ...,
\r
156 errors: Optional[str] = ...,
\r
157 ) -> Any: ... # morally: -> _TXT
\r
159 def check_output(args: _CMD,
\r
160 bufsize: int = ...,
\r
161 executable: _PATH = ...,
\r
162 stdin: _FILE = ...,
\r
163 stderr: _FILE = ...,
\r
164 preexec_fn: Callable[[], Any] = ...,
\r
165 close_fds: bool = ...,
\r
167 cwd: Optional[_PATH] = ...,
\r
168 env: Optional[_ENV] = ...,
\r
169 universal_newlines: bool = ...,
\r
170 startupinfo: Any = ...,
\r
171 creationflags: int = ...,
\r
172 restore_signals: bool = ...,
\r
173 start_new_session: bool = ...,
\r
174 pass_fds: Any = ...,
\r
175 timeout: float = ...,
\r
177 ) -> Any: ... # morally: -> _TXT
\r
180 PIPE = ... # type: int
\r
181 STDOUT = ... # type: int
\r
182 DEVNULL = ... # type: int
\r
183 class SubprocessError(Exception): ...
\r
184 class TimeoutExpired(SubprocessError):
\r
186 cmd = ... # type: Any
\r
187 timeout = ... # type: float
\r
188 # morally: Optional[_TXT]
\r
189 output = ... # type: Any
\r
190 stdout = ... # type: Any
\r
191 stderr = ... # type: Any
\r
194 class CalledProcessError(Exception):
\r
197 cmd = ... # type: Any
\r
198 # morally: Optional[_TXT]
\r
199 output = ... # type: Any
\r
201 if sys.version_info >= (3, 5):
\r
202 # morally: Optional[_TXT]
\r
203 stdout = ... # type: Any
\r
204 stderr = ... # type: Any
\r
209 output: Optional[_TXT] = ...,
\r
210 stderr: Optional[_TXT] = ...) -> None: ...
\r
213 args = ... # type: _CMD
\r
214 stdin = ... # type: IO[Any]
\r
215 stdout = ... # type: IO[Any]
\r
216 stderr = ... # type: IO[Any]
\r
220 if sys.version_info >= (3, 6):
\r
223 bufsize: int = ...,
\r
224 executable: Optional[_PATH] = ...,
\r
225 stdin: Optional[_FILE] = ...,
\r
226 stdout: Optional[_FILE] = ...,
\r
227 stderr: Optional[_FILE] = ...,
\r
228 preexec_fn: Optional[Callable[[], Any]] = ...,
\r
229 close_fds: bool = ...,
\r
231 cwd: Optional[_PATH] = ...,
\r
232 env: Optional[_ENV] = ...,
\r
233 universal_newlines: bool = ...,
\r
234 startupinfo: Optional[Any] = ...,
\r
235 creationflags: int = ...,
\r
236 restore_signals: bool = ...,
\r
237 start_new_session: bool = ...,
\r
238 pass_fds: Any = ...,
\r
240 encoding: Optional[str] = ...,
\r
241 errors: Optional[str] = ...) -> None: ...
\r
245 bufsize: int = ...,
\r
246 executable: Optional[_PATH] = ...,
\r
247 stdin: Optional[_FILE] = ...,
\r
248 stdout: Optional[_FILE] = ...,
\r
249 stderr: Optional[_FILE] = ...,
\r
250 preexec_fn: Optional[Callable[[], Any]] = ...,
\r
251 close_fds: bool = ...,
\r
253 cwd: Optional[_PATH] = ...,
\r
254 env: Optional[_ENV] = ...,
\r
255 universal_newlines: bool = ...,
\r
256 startupinfo: Optional[Any] = ...,
\r
257 creationflags: int = ...,
\r
258 restore_signals: bool = ...,
\r
259 start_new_session: bool = ...,
\r
260 pass_fds: Any = ...) -> None: ...
\r
262 def poll(self) -> int: ...
\r
263 def wait(self, timeout: Optional[float] = ...) -> int: ...
\r
265 def communicate(self,
\r
266 input: Optional[_TXT] = ...,
\r
267 timeout: Optional[float] = ...,
\r
268 # morally: -> Tuple[Optional[_TXT], Optional[_TXT]]
\r
269 ) -> Tuple[Any, Any]: ...
\r
270 def send_signal(self, signal: int) -> None: ...
\r
271 def terminate(self) -> None: ...
\r
272 def kill(self) -> None: ...
\r
273 def __enter__(self) -> 'Popen': ...
\r
274 def __exit__(self, type: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[TracebackType]) -> bool: ...
\r
276 # The result really is always a str.
\r
277 def getstatusoutput(cmd: _TXT) -> Tuple[int, str]: ...
\r
278 def getoutput(cmd: _TXT) -> str: ...
\r
280 def list2cmdline(seq: Sequence[str]) -> str: ... # undocumented
\r
282 if sys.platform == 'win32':
\r
284 if sys.version_info >= (3, 7):
\r
285 def __init__(self, *, dwFlags: int = ..., hStdInput: Optional[Any] = ..., hStdOutput: Optional[Any] = ..., hStdError: Optional[Any] = ..., wShowWindow: int = ..., lpAttributeList: Optional[Mapping[str, Any]] = ...) -> None: ...
\r
287 hStdInput: Optional[Any]
\r
288 hStdOutput: Optional[Any]
\r
289 hStdError: Optional[Any]
\r
291 if sys.version_info >= (3, 7):
\r
292 lpAttributeList: Mapping[str, Any]
\r
294 STD_INPUT_HANDLE: Any
\r
295 STD_OUTPUT_HANDLE: Any
\r
296 STD_ERROR_HANDLE: Any
\r
298 STARTF_USESTDHANDLES: int
\r
299 STARTF_USESHOWWINDOW: int
\r
300 CREATE_NEW_CONSOLE: int
\r
301 CREATE_NEW_PROCESS_GROUP: int
\r
302 if sys.version_info >= (3, 7):
\r
303 ABOVE_NORMAL_PRIORITY_CLASS: int
\r
304 BELOW_NORMAL_PRIORITY_CLASS: int
\r
305 HIGH_PRIORITY_CLASS: int
\r
306 IDLE_PRIORITY_CLASS: int
\r
307 NORMAL_PRIORITY_CLASS: int
\r
308 REALTIME_PRIORITY_CLASS: int
\r
309 CREATE_NO_WINDOW: int
\r
310 DETACHED_PROCESS: int
\r
311 CREATE_DEFAULT_ERROR_MODE: int
\r
312 CREATE_BREAKAWAY_FROM_JOB: int
\r