diff --git a/examples/port_publisher.py b/examples/port_publisher.py
index 61a3307..cf44945 100755
--- a/examples/port_publisher.py
+++ b/examples/port_publisher.py
@@ -332,11 +332,11 @@
 def test():
     service = ZeroconfService(name="TestService", port=3000)
     service.publish()
-    raw_input("Press any key to unpublish the service ")
+    input("Press the ENTER key to unpublish the service ")
     service.unpublish()
 
 
-if __name__ == '__main__':
+if __name__ == '__main__':  # noqa
     import logging
     import argparse
 
@@ -345,9 +345,10 @@
         logging.WARNING,    # 1 (default)
         logging.INFO,       # 2
         logging.DEBUG,      # 3
-        ]
+    ]
 
-    parser = argparse.ArgumentParser(usage="""\
+    parser = argparse.ArgumentParser(
+        usage="""\
 %(prog)s [options]
 
 Announce the existence of devices using zeroconf and provide
@@ -355,7 +356,7 @@
 
 If running as daemon, write to syslog. Otherwise write to stdout.
 """,
-            epilog="""\
+        epilog="""\
 NOTE: no security measures are implemented. Anyone can remotely connect
 to this service over the network.
 
@@ -366,57 +367,57 @@
     group = parser.add_argument_group("serial port settings")
 
     group.add_argument(
-            "--ports-regex",
-            help="specify a regex to search against the serial devices and their descriptions (default: %(default)s)",
-            default='/dev/ttyUSB[0-9]+',
-            metavar="REGEX")
+        "--ports-regex",
+        help="specify a regex to search against the serial devices and their descriptions (default: %(default)s)",
+        default='/dev/ttyUSB[0-9]+',
+        metavar="REGEX")
 
     group = parser.add_argument_group("network settings")
 
     group.add_argument(
-            "--tcp-port",
-            dest="base_port",
-            help="specify lowest TCP port number (default: %(default)s)",
-            default=7000,
-            type=int,
-            metavar="PORT")
+        "--tcp-port",
+        dest="base_port",
+        help="specify lowest TCP port number (default: %(default)s)",
+        default=7000,
+        type=int,
+        metavar="PORT")
 
     group = parser.add_argument_group("daemon")
 
     group.add_argument(
-            "-d", "--daemon",
-            dest="daemonize",
-            action="store_true",
-            help="start as daemon",
-            default=False)
+        "-d", "--daemon",
+        dest="daemonize",
+        action="store_true",
+        help="start as daemon",
+        default=False)
 
     group.add_argument(
-            "--pidfile",
-            help="specify a name for the PID file",
-            default=None,
-            metavar="FILE")
+        "--pidfile",
+        help="specify a name for the PID file",
+        default=None,
+        metavar="FILE")
 
     group = parser.add_argument_group("diagnostics")
 
     group.add_argument(
-            "-o", "--logfile",
-            help="write messages file instead of stdout",
-            default=None,
-            metavar="FILE")
+        "-o", "--logfile",
+        help="write messages file instead of stdout",
+        default=None,
+        metavar="FILE")
 
     group.add_argument(
-            "-q", "--quiet",
-            dest="verbosity",
-            action="store_const",
-            const=0,
-            help="suppress most diagnostic messages",
-            default=1)
+        "-q", "--quiet",
+        dest="verbosity",
+        action="store_const",
+        const=0,
+        help="suppress most diagnostic messages",
+        default=1)
 
     group.add_argument(
-            "-v", "--verbose",
-            dest="verbosity",
-            action="count",
-            help="increase diagnostic messages")
+        "-v", "--verbose",
+        dest="verbosity",
+        action="count",
+        help="increase diagnostic messages")
 
     args = parser.parse_args()
 
@@ -535,11 +536,11 @@
                     while port in ports_in_use:
                         port += 1
                     published[device] = Forwarder(
-                            device,
-                            "%s on %s" % (device, hostname),
-                            port,
-                            on_close=unpublish,
-                            log=log)
+                        device,
+                        "%s on %s" % (device, hostname),
+                        port,
+                        on_close=unpublish,
+                        log=log)
                     log.warning("publish: %s" % (published[device]))
                     published[device].open()
 
@@ -550,10 +551,10 @@
             for publisher in published.values():
                 publisher.update_select_maps(read_map, write_map, error_map)
             readers, writers, errors = select.select(
-                    read_map.keys(),
-                    write_map.keys(),
-                    error_map.keys(),
-                    5)
+                read_map.keys(),
+                write_map.keys(),
+                error_map.keys(),
+                5)
             # select_end = time.time()
             # print "select used %.3f s" % (select_end - select_start)
             for reader in readers:
diff --git a/examples/rfc2217_server.py b/examples/rfc2217_server.py
index 10c47c5..7830e40 100755
--- a/examples/rfc2217_server.py
+++ b/examples/rfc2217_server.py
@@ -22,10 +22,9 @@
         self.socket = socket
         self._write_lock = threading.Lock()
         self.rfc2217 = serial.rfc2217.PortManager(
-                self.serial,
-                self,
-                logger=logging.getLogger('rfc2217.server') if debug else None
-                )
+            self.serial,
+            self,
+            logger=logging.getLogger('rfc2217.server') if debug else None)
         self.log = logging.getLogger('redirector')
 
     def statusline_poller(self):
@@ -109,31 +108,27 @@
     parser.add_argument('SERIALPORT')
 
     parser.add_argument(
-            '-p', '--localport',
-            type=int,
-            help='local TCP port, default: %(default)s',
-            metavar='TCPPORT',
-            default=2217
-            )
+        '-p', '--localport',
+        type=int,
+        help='local TCP port, default: %(default)s',
+        metavar='TCPPORT',
+        default=2217)
 
     parser.add_argument(
-            '-v', '--verbose',
-            dest='verbosity',
-            action='count',
-            help='print more diagnostic messages (option can be given multiple times)',
-            default=0
-            )
+        '-v', '--verbose',
+        dest='verbosity',
+        action='count',
+        help='print more diagnostic messages (option can be given multiple times)',
+        default=0)
 
     args = parser.parse_args()
 
     if args.verbosity > 3:
         args.verbosity = 3
-    level = (
-            logging.WARNING,
-            logging.INFO,
-            logging.DEBUG,
-            logging.NOTSET,
-            )[args.verbosity]
+    level = (logging.WARNING,
+             logging.INFO,
+             logging.DEBUG,
+             logging.NOTSET)[args.verbosity]
     logging.basicConfig(level=logging.INFO)
     #~ logging.getLogger('root').setLevel(logging.INFO)
     logging.getLogger('rfc2217').setLevel(level)
@@ -170,10 +165,9 @@
             ser.dtr = True
             # enter network <-> serial loop
             r = Redirector(
-                    ser,
-                    client_socket,
-                    args.verbosity > 0
-                    )
+                ser,
+                client_socket,
+                args.verbosity > 0)
             try:
                 r.shortcircuit()
             finally:
diff --git a/examples/tcp_serial_redirect.py b/examples/tcp_serial_redirect.py
index eaabe40..97a73b4 100755
--- a/examples/tcp_serial_redirect.py
+++ b/examples/tcp_serial_redirect.py
@@ -26,11 +26,11 @@
             self.socket.sendall(data)
 
 
-if __name__ == '__main__':
+if __name__ == '__main__':  # noqa
     import argparse
 
     parser = argparse.ArgumentParser(
-        description="Simple Serial to Network (TCP/IP) redirector.",
+        description='Simple Serial to Network (TCP/IP) redirector.',
         epilog="""\
 NOTE: no security measures are implemented. Anyone can remotely connect
 to this service over the network.
@@ -40,62 +40,62 @@
 """)
 
     parser.add_argument(
-            'SERIALPORT',
-            help="serial port name")
+        'SERIALPORT',
+        help="serial port name")
 
     parser.add_argument(
-            'BAUDRATE',
-            type=int,
-            nargs='?',
-            help='set baud rate, default: %(default)s',
-            default=9600)
+        'BAUDRATE',
+        type=int,
+        nargs='?',
+        help='set baud rate, default: %(default)s',
+        default=9600)
 
     parser.add_argument(
-            '-q', '--quiet',
-            action='store_true',
-            help='suppress non error messages',
-            default=False)
+        '-q', '--quiet',
+        action='store_true',
+        help='suppress non error messages',
+        default=False)
 
     group = parser.add_argument_group('serial port')
 
     group.add_argument(
-            "--parity",
-            choices=['N', 'E', 'O', 'S', 'M'],
-            type=lambda c: c.upper(),
-            help="set parity, one of {N E O S M}, default: N",
-            default='N')
+        "--parity",
+        choices=['N', 'E', 'O', 'S', 'M'],
+        type=lambda c: c.upper(),
+        help="set parity, one of {N E O S M}, default: N",
+        default='N')
 
     group.add_argument(
-            '--rtscts',
-            action='store_true',
-            help='enable RTS/CTS flow control (default off)',
-            default=False)
+        '--rtscts',
+        action='store_true',
+        help='enable RTS/CTS flow control (default off)',
+        default=False)
 
     group.add_argument(
-            '--xonxoff',
-            action='store_true',
-            help='enable software flow control (default off)',
-            default=False)
+        '--xonxoff',
+        action='store_true',
+        help='enable software flow control (default off)',
+        default=False)
 
     group.add_argument(
-            '--rts',
-            type=int,
-            help='set initial RTS line state (possible values: 0, 1)',
-            default=None)
+        '--rts',
+        type=int,
+        help='set initial RTS line state (possible values: 0, 1)',
+        default=None)
 
     group.add_argument(
-            '--dtr',
-            type=int,
-            help='set initial DTR line state (possible values: 0, 1)',
-            default=None)
+        '--dtr',
+        type=int,
+        help='set initial DTR line state (possible values: 0, 1)',
+        default=None)
 
     group = parser.add_argument_group('network settings')
 
     group.add_argument(
-            '-P', '--localport',
-            type=int,
-            help='local TCP port',
-            default=7777)
+        '-P', '--localport',
+        type=int,
+        help='local TCP port',
+        default=7777)
 
     args = parser.parse_args()
 
@@ -113,14 +113,14 @@
         ser.dtr = args.dtr
 
     if not args.quiet:
-        sys.stderr.write('--- TCP/IP to Serial redirect on {p.name}  {p.baudrate},{p.bytesize},{p.parity},{p.stopbits} ---\n'.format(
-                p=ser))
-        sys.stderr.write("--- type Ctrl-C / BREAK to quit\n")
+        sys.stderr.write(
+            '--- TCP/IP to Serial redirect on {p.name}  {p.baudrate},{p.bytesize},{p.parity},{p.stopbits} ---\n'
+            '--- type Ctrl-C / BREAK to quit\n'.format(p=ser))
 
     try:
         ser.open()
     except serial.SerialException as e:
-        sys.stderr.write("Could not open serial port {}: {}\n".format(ser.name, e))
+        sys.stderr.write('Could not open serial port {}: {}\n'.format(ser.name, e))
         sys.exit(1)
 
     ser_to_net = SerialToNet()
@@ -133,7 +133,7 @@
     srv.listen(1)
     try:
         while True:
-            sys.stderr.write("Waiting for connection on {}...\n".format(args.localport))
+            sys.stderr.write('Waiting for connection on {}...\n'.format(args.localport))
             client_socket, addr = srv.accept()
             sys.stderr.write('Connected by {}\n'.format(addr))
             try:
