forked from commitizen-tools/commitizen
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathunix.py
More file actions
68 lines (55 loc) · 1.88 KB
/
Copy pathunix.py
File metadata and controls
68 lines (55 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import sys
if sys.platform != "win32" and sys.platform != "linux": # pragma: no cover
import os
import selectors
from asyncio import (
DefaultEventLoopPolicy,
SelectorEventLoop,
get_event_loop_policy,
set_event_loop_policy,
)
from io import IOBase
class WrapStdioUnix:
def __init__(self, stdx: IOBase):
self._fileno = stdx.fileno()
fd = os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY)
if self._fileno == 0:
tty = open(fd, "r", buffering=1)
else:
tty = open(fd, "w", buffering=1)
self.tty = tty
def __getattr__(self, key):
if key == "encoding":
return "UTF-8"
return getattr(self.tty, key)
backup_event_loop_policy = None
backup_stdin = None
backup_stdout = None
backup_stderr = None
def _wrap_stdio():
global backup_event_loop_policy
backup_event_loop_policy = get_event_loop_policy()
event_loop = DefaultEventLoopPolicy()
event_loop.set_event_loop(SelectorEventLoop(selectors.SelectSelector()))
set_event_loop_policy(event_loop)
global backup_stdin
backup_stdin = sys.stdin
sys.stdin = WrapStdioUnix(sys.stdin)
global backup_stdout
backup_stdout = sys.stdout
sys.stdout = WrapStdioUnix(sys.stdout)
global backup_stderr
backup_stdout = sys.stderr
sys.stderr = WrapStdioUnix(sys.stderr)
def _unwrap_stdio():
global backup_event_loop_policy
set_event_loop_policy(backup_event_loop_policy)
global backup_stdin
sys.stdin.close()
sys.stdin = backup_stdin
global backup_stdout
sys.stdout.close()
sys.stdout = backup_stdout
global backup_stderr
sys.stderr.close()
sys.stderr = backup_stderr