Construct and return tuple with IO objects: p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
(self, stdin, stdout, stderr)
| 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) |
no test coverage detected