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