Construct and return tuple with IO objects: p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite
(self, stdin, stdout, stderr)
| 1347 | # Windows methods |
| 1348 | # |
| 1349 | def _get_handles(self, stdin, stdout, stderr): |
| 1350 | """Construct and return tuple with IO objects: |
| 1351 | p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite |
| 1352 | """ |
| 1353 | if stdin is None and stdout is None and stderr is None: |
| 1354 | return (-1, -1, -1, -1, -1, -1) |
| 1355 | |
| 1356 | p2cread, p2cwrite = -1, -1 |
| 1357 | c2pread, c2pwrite = -1, -1 |
| 1358 | errread, errwrite = -1, -1 |
| 1359 | |
| 1360 | with self._on_error_fd_closer() as err_close_fds: |
| 1361 | if stdin is None: |
| 1362 | p2cread = _winapi.GetStdHandle(_winapi.STD_INPUT_HANDLE) |
| 1363 | if p2cread is None: |
| 1364 | p2cread, _ = _winapi.CreatePipe(None, 0) |
| 1365 | p2cread = Handle(p2cread) |
| 1366 | err_close_fds.append(p2cread) |
| 1367 | _winapi.CloseHandle(_) |
| 1368 | elif stdin == PIPE: |
| 1369 | p2cread, p2cwrite = _winapi.CreatePipe(None, 0) |
| 1370 | p2cread, p2cwrite = Handle(p2cread), Handle(p2cwrite) |
| 1371 | err_close_fds.extend((p2cread, p2cwrite)) |
| 1372 | elif stdin == DEVNULL: |
| 1373 | p2cread = msvcrt.get_osfhandle(self._get_devnull()) |
| 1374 | elif isinstance(stdin, int): |
| 1375 | p2cread = msvcrt.get_osfhandle(stdin) |
| 1376 | else: |
| 1377 | # Assuming file-like object |
| 1378 | p2cread = msvcrt.get_osfhandle(stdin.fileno()) |
| 1379 | p2cread = self._make_inheritable(p2cread) |
| 1380 | |
| 1381 | if stdout is None: |
| 1382 | c2pwrite = _winapi.GetStdHandle(_winapi.STD_OUTPUT_HANDLE) |
| 1383 | if c2pwrite is None: |
| 1384 | _, c2pwrite = _winapi.CreatePipe(None, 0) |
| 1385 | c2pwrite = Handle(c2pwrite) |
| 1386 | err_close_fds.append(c2pwrite) |
| 1387 | _winapi.CloseHandle(_) |
| 1388 | elif stdout == PIPE: |
| 1389 | c2pread, c2pwrite = _winapi.CreatePipe(None, 0) |
| 1390 | c2pread, c2pwrite = Handle(c2pread), Handle(c2pwrite) |
| 1391 | err_close_fds.extend((c2pread, c2pwrite)) |
| 1392 | elif stdout == DEVNULL: |
| 1393 | c2pwrite = msvcrt.get_osfhandle(self._get_devnull()) |
| 1394 | elif isinstance(stdout, int): |
| 1395 | c2pwrite = msvcrt.get_osfhandle(stdout) |
| 1396 | else: |
| 1397 | # Assuming file-like object |
| 1398 | c2pwrite = msvcrt.get_osfhandle(stdout.fileno()) |
| 1399 | c2pwrite = self._make_inheritable(c2pwrite) |
| 1400 | |
| 1401 | if stderr is None: |
| 1402 | errwrite = _winapi.GetStdHandle(_winapi.STD_ERROR_HANDLE) |
| 1403 | if errwrite is None: |
| 1404 | _, errwrite = _winapi.CreatePipe(None, 0) |
| 1405 | errwrite = Handle(errwrite) |
| 1406 | err_close_fds.append(errwrite) |
no test coverage detected