我们从Python开源项目中,提取了以下50个代码示例,用于说明如何使用termios.TCSAFLUSH。
def __init__(self): '''Creates a KBHit object that you can call to do various keyboard things. ''' if os.name == 'nt': pass else: # Save the terminal settings self.fd = sys.stdin.fileno() self.new_term = termios.tcgetattr(self.fd) self.old_term = termios.tcgetattr(self.fd) # New terminal setting unbuffered self.new_term[3] = (self.new_term[3] & ~termios.ICANON & ~termios.ECHO) termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.new_term) # Support normal-terminal reset at exit atexit.register(self.set_normal_term)
def wait_key(): ''' Wait for a key press on the console and return it. ''' result = None if os.name == 'nt': import msvcrt result = msvcrt.getch() else: import termios fd = sys.stdin.fileno() oldterm = termios.tcgetattr(fd) newattr = termios.tcgetattr(fd) newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO termios.tcsetattr(fd, termios.TCSANOW, newattr) try: result = sys.stdin.read(1) except IOError: pass finally: termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) return result
def keyboard(callback, exit='q'): fd = sys.stdin.fileno() oldterm = termios.tcgetattr(fd) newattr = termios.tcgetattr(fd) newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO termios.tcsetattr(fd, termios.TCSANOW, newattr) oldflags = fcntl.fcntl(fd, fcntl.F_GETFL) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) try: while True: try: ch = sys.stdin.read(1) if ch: callback(ch) if ch == exit: break except IOError: pass finally: termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
def __enter__(self): # save the terminal settings self.fd = sys.stdin.fileno() self.new_term = termios.tcgetattr(self.fd) self.old_term = termios.tcgetattr(self.fd) # new terminal setting unbuffered self.new_term[3] = (self.new_term[3] & ~termios.ICANON & ~termios.ECHO) # switch to unbuffered terminal termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.new_term) return self.query_keyboard
def setupterm(): global settings update_geometry() hide_cursor() do('smkx') # keypad mode if not settings: settings = termios.tcgetattr(fd.fileno()) mode = termios.tcgetattr(fd.fileno()) IFLAG = 0 OFLAG = 1 CFLAG = 2 LFLAG = 3 ISPEED = 4 OSPEED = 5 CC = 6 mode[LFLAG] = mode[LFLAG] & ~(termios.ECHO | termios.ICANON | termios.IEXTEN) mode[CC][termios.VMIN] = 1 mode[CC][termios.VTIME] = 0 termios.tcsetattr(fd, termios.TCSAFLUSH, mode)
def __enter__(self): global isWindows if isWindows: self.readHandle = GetStdHandle(STD_INPUT_HANDLE) self.readHandle.SetConsoleMode(ENABLE_LINE_INPUT|ENABLE_ECHO_INPUT|ENABLE_PROCESSED_INPUT) self.curEventLength = 0 self.curKeysLength = 0 self.capturedChars = [] else: # Save the terminal settings self.fd = sys.stdin.fileno() self.new_term = termios.tcgetattr(self.fd) self.old_term = termios.tcgetattr(self.fd) # New terminal setting unbuffered self.new_term[3] = (self.new_term[3] & ~termios.ICANON & ~termios.ECHO) termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.new_term) return self
def get_keypress(): """Wait for a keypress and return key pressed. This is the *nix version of this command""" import termios, fcntl, sys, os fd = sys.stdin.fileno() oldterm = termios.tcgetattr(fd) newattr = termios.tcgetattr(fd) newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO termios.tcsetattr(fd, termios.TCSANOW, newattr) oldflags = fcntl.fcntl(fd, fcntl.F_GETFL) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) try: while 1: try: c = sys.stdin.read(1) break except IOError: pass finally: termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags) return c
def getch(): fd = sys.stdin.fileno() oldattr = termios.tcgetattr(fd) newattr = termios.tcgetattr(fd) newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO termios.tcsetattr(fd, termios.TCSANOW, newattr) oldflags = fcntl.fcntl(fd, fcntl.F_GETFL) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) try: while True: try: c = sys.stdin.read(1) except IOError: pass else: return c finally: termios.tcsetattr(fd, termios.TCSAFLUSH, oldattr) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
def set_normal_term(): termios.tcsetattr(fd, termios.TCSAFLUSH, old_term) # switch to unbuffered terminal
def set_curses_term(): termios.tcsetattr(fd, termios.TCSAFLUSH, new_term)
def cleanup(self): termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.old)
def set_normal_term(self): ''' Resets to normal terminal. On Windows this is a no-op. ''' if os.name == 'nt': pass else: termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.old_term)
def restart(self, cmd): if not self.completed: self.process_input("\n\033[01;31mProcess killed.\033[00m\r\n") os.kill(self.pid, signal.SIGHUP) thread = self.thread thread.stop() while thread.alive: QCoreApplication.processEvents() self.exit_pipe, child_pipe = os.pipe() pid, fd = pty.fork() if pid == 0: try: os.environ["TERM"] = "xterm-256color" retval = subprocess.call(cmd, close_fds=True) os.write(2, "\033[01;34mProcess has completed.\033[00m\n") os.write(child_pipe, "t") os._exit(retval) except: pass os.write(2, "\033[01;31mCommand '" + cmd[0] + "' failed to execute.\033[00m\n") os.write(child_pipe, "f") os._exit(1) os.close(child_pipe) self.process_input("\033[01;34mStarted process with PID %d.\033[00m\r\n" % pid) self.pid = pid self.data_pipe = fd self.completed = False # Initialize terminal settings fcntl.ioctl(self.data_pipe, termios.TIOCSWINSZ, struct.pack("hhhh", self.rows, self.cols, 0, 0)) attribute = termios.tcgetattr(self.data_pipe) termios.tcsetattr(self.data_pipe, termios.TCSAFLUSH, attribute) self.thread = TerminalUpdateThread(self, self.data_pipe, self.exit_pipe) self.thread.start()
def disable_echo(fd): old = termios.tcgetattr(fd) new = cfmakeraw(old) flags = ( termios.TCSAFLUSH | getattr(termios, 'TCSASOFT', 0) ) termios.tcsetattr(fd, flags, new)
def cleanup(self): if self.old is not None: termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.old)
def __enter__(self): # Save the terminal settings self.fd = sys.stdin.fileno() self.new_term = termios.tcgetattr(self.fd) self.old_term = termios.tcgetattr(self.fd) # New terminal setting unbuffered self.new_term[3] = (self.new_term[3] & ~termios.ICANON & ~termios.ECHO) termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.new_term) return self
def __exit__(self, type, value, traceback): termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.old_term)
def __init__(self): global CIO_STARTED if CIO_STARTED: raise Exception("cannot init cio twice") CIO_STARTED = True self.buf='' self.fh_ocfg=list() if os.name == 'posix': # for posix, need to set to non-canonical input. self.posix=True fh = sys.stdin.fileno() # if the following call fails, we are probably called with a stdin which is not a tty. ocfg = termios.tcgetattr(fh) cfg = termios.tcgetattr(fh) cfg[3] = cfg[3]&~termios.ICANON&~termios.ECHO #cfg[0] = cfg[0]&~termios.INLCR #cfg[1] = cfg[0]&~termios.OCRNL cfg[6][termios.VMIN] = 0 cfg[6][termios.VTIME] = 0 termios.tcsetattr(fh,termios.TCSAFLUSH,cfg) self.fh_ocfg.extend((fh,ocfg)) atexit.register(stop_canon_input,self.fh_ocfg) elif os.name == 'nt': # for windows, don't need to configure the terminal. self.posix=False else: # know only posix and windows... raise Exception("os variant %s not supported"%repr(os.name))
def stop_canon_input(fh_ocfg): if fh_ocfg is None: return args = fh_ocfg[:] del fh_ocfg[:] if len(args)>=2: termios.tcsetattr(args[0],termios.TCSAFLUSH,args[1]) # some tiny test program if started as standalone.
def __exit__(self, type, value, traceback): # swith to normal terminal termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.old_term)
def run(self): if os.name != "posix": raise ValueError("Can only be run on Posix systems") return buffer = "" # While PySerial would be preferable and more machine-independant, # it does not support echo suppression with open(self.dbgser_tty_name, 'r+') as dbgser: # Config the debug serial port oldattrs = termios.tcgetattr(dbgser) newattrs = termios.tcgetattr(dbgser) newattrs[4] = termios.B115200 # ispeed newattrs[5] = termios.B115200 # ospeed newattrs[3] = newattrs[3] & ~termios.ICANON & ~termios.ECHO newattrs[6][termios.VMIN] = 0 newattrs[6][termios.VTIME] = 10 termios.tcsetattr(dbgser, termios.TCSANOW, newattrs) # As long as we weren't asked to stop, try to capture dbgserial # output and push each line up the result queue. try: while not self.stoprequest.isSet(): ch = dbgser.read(1) if ch: if ch == "\n": # Push the line (sans newline) into our queue # and clear the buffer for the next line. self.result_q.put(buffer) buffer = "" elif ch != "\r": buffer += ch except IOError: pass finally: # Restore previous settings termios.tcsetattr(dbgser, termios.TCSAFLUSH, oldattrs) # Flush any partial buffer if buffer: self.result_q.put(buffer)
def __exit__(self, type, value, traceback): if isWindows: pass else: termios.tcsetattr(self.fd, termios.TCSAFLUSH, self.old_term)
def warning(message, answer=None): """ Print warning message into srdErr and may can for answer :param message: message :param answer: list of supported options. Default is first item. """ c = "" if sys.stderr.isatty(): sys.stderr.write("\n\x1b[92;01m%s " % message) else: sys.stderr.write("\n%s " % message) if answer: fd = sys.stdin.fileno() oldterm = termios.tcgetattr(fd) newattr = termios.tcgetattr(fd) newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO termios.tcsetattr(fd, termios.TCSANOW, newattr) oldflags = fcntl.fcntl(fd, fcntl.F_GETFL) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) try: while 1: try: c = sys.stdin.read(1) break except IOError: pass finally: termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags) c = ("%s" % c).lower() if sys.stderr.isatty(): sys.stderr.write(" %s\x1b[39;49;00m\n\n" % c) else: sys.stderr.write(" %s\n\n" % c) if answer: for it in answer: if c in it: return c return answer.pop(0)