MCPcopy Create free account
hub / github.com/RT-Thread/env-windows / _get_handles

Method _get_handles

tools/python-3.11.9-amd64/Lib/subprocess.py:1335–1411  ·  view source on GitHub ↗

Construct and return tuple with IO objects: p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite

(self, stdin, stdout, stderr)

Source from the content-addressed store, hash-verified

1333 # Windows methods
1334 #
1335 def _get_handles(self, stdin, stdout, stderr):
1336 """Construct and return tuple with IO objects:
1337 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1338 """
1339 if stdin is None and stdout is None and stderr is None:
1340 return (-1, -1, -1, -1, -1, -1)
1341
1342 p2cread, p2cwrite = -1, -1
1343 c2pread, c2pwrite = -1, -1
1344 errread, errwrite = -1, -1
1345
1346 with self._on_error_fd_closer() as err_close_fds:
1347 if stdin is None:
1348 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
1349 if p2cread is None:
1350 p2cread, _ = _winapi.CreatePipe(None, 0)
1351 p2cread = Handle(p2cread)
1352 err_close_fds.append(p2cread)
1353 _winapi.CloseHandle(_)
1354 elif stdin == PIPE:
1355 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1356 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
1357 err_close_fds.extend((p2cread, p2cwrite))
1358 elif stdin == DEVNULL:
1359 p2cread = msvcrt.get_osfhandle(self._get_devnull())
1360 elif isinstance(stdin, int):
1361 p2cread = msvcrt.get_osfhandle(stdin)
1362 else:
1363 # Assuming file-like object
1364 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1365 p2cread = self._make_inheritable(p2cread)
1366
1367 if stdout is None:
1368 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
1369 if c2pwrite is None:
1370 _, c2pwrite = _winapi.CreatePipe(None, 0)
1371 c2pwrite = Handle(c2pwrite)
1372 err_close_fds.append(c2pwrite)
1373 _winapi.CloseHandle(_)
1374 elif stdout == PIPE:
1375 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1376 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
1377 err_close_fds.extend((c2pread, c2pwrite))
1378 elif stdout == DEVNULL:
1379 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
1380 elif isinstance(stdout, int):
1381 c2pwrite = msvcrt.get_osfhandle(stdout)
1382 else:
1383 # Assuming file-like object
1384 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1385 c2pwrite = self._make_inheritable(c2pwrite)
1386
1387 if stderr is None:
1388 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
1389 if errwrite is None:
1390 _, errwrite = _winapi.CreatePipe(None, 0)
1391 errwrite = Handle(errwrite)
1392 err_close_fds.append(errwrite)

Callers 1

__init__Method · 0.95

Calls 7

_on_error_fd_closerMethod · 0.95
_get_devnullMethod · 0.95
_make_inheritableMethod · 0.95
HandleClass · 0.70
appendMethod · 0.45
extendMethod · 0.45
filenoMethod · 0.45

Tested by

no test coverage detected