diff options
author | Chris Liechti <cliechti@gmx.net> | 2015-08-24 01:31:42 +0200 |
---|---|---|
committer | Chris Liechti <cliechti@gmx.net> | 2015-08-24 01:31:42 +0200 |
commit | 269f77bf5565c587324cda6c49d8c63c9d65c221 (patch) | |
tree | f57ad7880cdcce5ca88b9223eccaf554d328d92f | |
parent | 4d989c2570de9af859c09102654c18dd99a21cd4 (diff) | |
download | pyserial-git-269f77bf5565c587324cda6c49d8c63c9d65c221.tar.gz |
miniterm: switch console mode in context manager
-rw-r--r-- | serial/tools/miniterm.py | 76 |
1 files changed, 42 insertions, 34 deletions
diff --git a/serial/tools/miniterm.py b/serial/tools/miniterm.py index a88e23f..b388671 100644 --- a/serial/tools/miniterm.py +++ b/serial/tools/miniterm.py @@ -55,6 +55,17 @@ class ConsoleBase(object): self.output.write(s) self.output.flush() + # - - - - - - - - - - - - - - - - - - - - - - - - + # context manager: + # switch terminal temporary to normal mode (e.g. to get user input) + + def __enter__(self): + self.cleanup() + return self + + def __exit__(self, *args, **kwargs): + self.setup() + if os.name == 'nt': import msvcrt @@ -403,24 +414,23 @@ class Miniterm(object): elif c == '\x15': # CTRL+U -> upload file sys.stderr.write('\n--- File to upload: ') sys.stderr.flush() - self.console.cleanup() - filename = sys.stdin.readline().rstrip('\r\n') - if filename: - try: - with open(filename, 'rb') as f: - sys.stderr.write('--- Sending file {} ---\n'.format(filename)) - while True: - block = f.read(1024) - if not block: - break - self.serial.write(block) - # Wait for output buffer to drain. - self.serial.flush() - sys.stderr.write('.') # Progress indicator. - sys.stderr.write('\n--- File {} sent ---\n'.format(filename)) - except IOError as e: - sys.stderr.write('--- ERROR opening file {}: {} ---\n'.format(filename, e)) - self.console.setup() + with self.console: + filename = sys.stdin.readline().rstrip('\r\n') + if filename: + try: + with open(filename, 'rb') as f: + sys.stderr.write('--- Sending file {} ---\n'.format(filename)) + while True: + block = f.read(1024) + if not block: + break + self.serial.write(block) + # Wait for output buffer to drain. + self.serial.flush() + sys.stderr.write('.') # Progress indicator. + sys.stderr.write('\n--- File {} sent ---\n'.format(filename)) + except IOError as e: + sys.stderr.write('--- ERROR opening file {}: {} ---\n'.format(filename, e)) elif c in '\x08hH?': # CTRL+H, h, H, ? -> Show help sys.stderr.write(self.get_help_text()) elif c == '\x12': # CTRL+R -> Toggle RTS @@ -446,12 +456,11 @@ class Miniterm(object): dump_port_list() sys.stderr.write('--- Enter port name: ') sys.stderr.flush() - self.console.cleanup() - try: - port = sys.stdin.readline().strip() - except KeyboardInterrupt: - port = None - self.console.setup() + with self.console: + try: + port = sys.stdin.readline().strip() + except KeyboardInterrupt: + port = None if port and port != self.serial.port: # reader thread needs to be shut down self._stop_reader() @@ -477,16 +486,15 @@ class Miniterm(object): elif c in 'bB': # B -> change baudrate sys.stderr.write('\n--- Baudrate: ') sys.stderr.flush() - self.console.cleanup() - backup = self.serial.baudrate - try: - self.serial.baudrate = int(sys.stdin.readline().strip()) - except ValueError as e: - sys.stderr.write('--- ERROR setting baudrate: %s ---\n'.format(e)) - self.serial.baudrate = backup - else: - self.dump_port_settings() - self.console.setup() + with self.console: + backup = self.serial.baudrate + try: + self.serial.baudrate = int(sys.stdin.readline().strip()) + except ValueError as e: + sys.stderr.write('--- ERROR setting baudrate: %s ---\n'.format(e)) + self.serial.baudrate = backup + else: + self.dump_port_settings() elif c == '8': # 8 -> change to 8 bits self.serial.bytesize = serial.EIGHTBITS self.dump_port_settings() |