MCPcopy Index your code
hub / github.com/python/cpython / _get_handles

Method _get_handles

Lib/subprocess.py:1403–1479  ·  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

1401 # Windows methods
1402 #
1403 def _get_handles(self, stdin, stdout, stderr):
1404 """Construct and return tuple with IO objects:
1405 p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
1406 """
1407 if stdin is None and stdout is None and stderr is None:
1408 return (-1, -1, -1, -1, -1, -1)
1409
1410 p2cread, p2cwrite = -1, -1
1411 c2pread, c2pwrite = -1, -1
1412 errread, errwrite = -1, -1
1413
1414 with self._on_error_fd_closer() as err_close_fds:
1415 if stdin is None:
1416 p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE)
1417 if p2cread is None:
1418 p2cread, _ = _winapi.CreatePipe(None, 0)
1419 p2cread = Handle(p2cread)
1420 err_close_fds.append(p2cread)
1421 _winapi.CloseHandle(_)
1422 elif stdin == PIPE:
1423 p2cread, p2cwrite = _winapi.CreatePipe(None, 0)
1424 p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite)
1425 err_close_fds.extend((p2cread, p2cwrite))
1426 elif stdin == DEVNULL:
1427 p2cread = msvcrt.get_osfhandle(self._get_devnull())
1428 elif isinstance(stdin, int):
1429 p2cread = msvcrt.get_osfhandle(stdin)
1430 else:
1431 # Assuming file-like object
1432 p2cread = msvcrt.get_osfhandle(stdin.fileno())
1433 p2cread = self._make_inheritable(p2cread)
1434
1435 if stdout is None:
1436 c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE)
1437 if c2pwrite is None:
1438 _, c2pwrite = _winapi.CreatePipe(None, 0)
1439 c2pwrite = Handle(c2pwrite)
1440 err_close_fds.append(c2pwrite)
1441 _winapi.CloseHandle(_)
1442 elif stdout == PIPE:
1443 c2pread, c2pwrite = _winapi.CreatePipe(None, 0)
1444 c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite)
1445 err_close_fds.extend((c2pread, c2pwrite))
1446 elif stdout == DEVNULL:
1447 c2pwrite = msvcrt.get_osfhandle(self._get_devnull())
1448 elif isinstance(stdout, int):
1449 c2pwrite = msvcrt.get_osfhandle(stdout)
1450 else:
1451 # Assuming file-like object
1452 c2pwrite = msvcrt.get_osfhandle(stdout.fileno())
1453 c2pwrite = self._make_inheritable(c2pwrite)
1454
1455 if stderr is None:
1456 errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE)
1457 if errwrite is None:
1458 _, errwrite = _winapi.CreatePipe(None, 0)
1459 errwrite = Handle(errwrite)
1460 err_close_fds.append(errwrite)

Callers 1

__init__Method · 0.95

Calls 8

_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
pipeMethod · 0.45

Tested by

no test coverage detected