1 import sys, os, io, termios
3 class autherror(Exception):
13 def message(self, msg, level=0):
15 def prompt(self, prompt, echo, default=None):
19 def __init__(self, ifp, ofp):
24 self.ofp.write("%s\n" % (msg,))
26 def message(self, msg, level=0):
27 if level <= self.msg_info:
28 self.ofp.write("%s\n" % (msg,))
30 def prompt(self, prompt, echo, default=None):
32 self.ofp.write(prompt)
34 ret = self.ifp.readline()
35 assert ret[-1] == '\n'
38 attr = termios.tcgetattr(self.ifp.fileno())
41 attr[3] &= ~termios.ECHO
42 termios.tcflush(self.ifp.fileno(), termios.TCIOFLUSH)
43 termios.tcsetattr(self.ifp.fileno(), termios.TCSANOW, attr)
44 self.ofp.write(prompt)
46 ret = self.ifp.readline()
48 assert ret[-1] == '\n'
51 termios.tcsetattr(self.ifp.fileno(), termios.TCSANOW, bka)
53 class ctermconv(termconv):
54 def __init__(self, fp):
55 super().__init__(fp, fp)
62 def __exit__(self, *excinfo):
67 stdioconv = termconv(sys.stdin, sys.stdout)
70 return ctermconv(io.TextIOWrapper(io.FileIO(os.open("/dev/tty", os.O_RDWR | os.O_NOCTTY), "r+")))