work on python 3 compatibility
diff --git a/examples/port_publisher.py b/examples/port_publisher.py
index 91de063..393beb5 100644
--- a/examples/port_publisher.py
+++ b/examples/port_publisher.py
@@ -9,10 +9,12 @@
   does not influence serial port

 - only one client per connection

 """

-import sys, os, time

-import traceback

-import socket

+import os

 import select

+import socket

+import sys

+import time

+import traceback

 

 import serial

 import serial.rfc2217

@@ -108,7 +110,7 @@
         try:

             self.serial.open()

             self.serial.setRTS(False)

-        except Exception, msg:

+        except Exception as msg:

             self.handle_serial_error(msg)

 

         self.serial_settings_backup = self.serial.getSettingsDict()

@@ -127,7 +129,7 @@
         try:

             self.server_socket.bind( ('', self.network_port) )

             self.server_socket.listen(1)

-        except socket.error, msg:

+        except socket.error as msg:

             self.handle_server_error()

             #~ raise

         if not options.quiet:

@@ -142,7 +144,7 @@
     def close(self):

         """Close all resources and unpublish service"""

         if not options.quiet:

-            print "%s: closing..." % (self.device, )

+            print("%s: closing..." % (self.device, ))

         self.alive = False

         self.unpublish()

         if self.server_socket: self.server_socket.close()

@@ -201,7 +203,7 @@
                     self.buffer_ser2net += data

             else:

                 self.handle_serial_error()

-        except Exception, msg:

+        except Exception as msg:

             self.handle_serial_error(msg)

 

     def handle_serial_write(self):

@@ -211,7 +213,7 @@
             n = os.write(self.serial.fileno(), self.buffer_net2ser)

             # and see how large that chunk was, remove that from buffer

             self.buffer_net2ser = self.buffer_net2ser[n:]

-        except Exception, msg:

+        except Exception as msg:

             self.handle_serial_error(msg)

 

     def handle_serial_error(self, error=None):

@@ -260,7 +262,7 @@
             self.socket.setblocking(0)

             self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)

             if not options.quiet:

-                print '%s: Connected by %s:%s' % (self.device, addr[0], addr[1])

+                print('%s: Connected by %s:%s' % (self.device, addr[0], addr[1]))

             self.serial.setRTS(True)

             self.serial.setDTR(True)

             self.rfc2217 = serial.rfc2217.PortManager(self.serial, self)

@@ -268,7 +270,7 @@
             # reject connection if there is already one

             connection.close()

             if not options.quiet:

-                print '%s: Rejecting connect from %s:%s' % (self.device, addr[0], addr[1])

+                print('%s: Rejecting connect from %s:%s' % (self.device, addr[0], addr[1]))

 

     def handle_server_error(self):

         """Socket server fails"""

@@ -292,7 +294,7 @@
                 self.socket.close()

                 self.socket = None

                 if not options.quiet:

-                    print '%s: Disconnected' % self.device

+                    print('%s: Disconnected' % self.device)

 

 

 def test():

@@ -355,7 +357,7 @@
             if pid > 0:

                 # exit first parent

                 sys.exit(0)

-        except OSError, e:

+        except OSError as e:

             sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))

             sys.exit(1)

 

@@ -373,7 +375,7 @@
                 if options.pid_file is not None:

                     open(options.pid_file,'w').write("%d"%pid)

                 sys.exit(0)

-        except OSError, e:

+        except OSError as e:

             sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))

             sys.exit(1)

 

@@ -416,7 +418,7 @@
         except KeyError:

             pass

         else:

-            if not options.quiet: print "unpublish: %s" % (forwarder)

+            if not options.quiet: print("unpublish: %s" % (forwarder))

 

     alive = True

     next_check = 0

@@ -439,12 +441,12 @@
                                 7000+num,

                                 on_close=unpublish

                             )

-                            if not options.quiet: print "publish: %s" % (published[device])

+                            if not options.quiet: print("publish: %s" % (published[device]))

                             published[device].open()

                     else:

                         # or when it disappeared

                         if device in published:

-                            if not options.quiet: print "unpublish: %s" % (published[device])

+                            if not options.quiet: print("unpublish: %s" % (published[device]))

                             published[device].close()

                             try:

                                 del published[device]

@@ -464,7 +466,7 @@
                     error_map.keys(),

                     5

                 )

-            except select.error, err:

+            except select.error as err:

                 if err[0] != EINTR:

                     raise

             # select_end = time.time()

diff --git a/examples/rfc2217_server.py b/examples/rfc2217_server.py
index 069900a..886925a 100644
--- a/examples/rfc2217_server.py
+++ b/examples/rfc2217_server.py
@@ -5,16 +5,16 @@
 # using RFC 2217
 
 
-import sys
+import logging
 import os
-import threading
-import time
 import socket
+import sys
+import time
+import threading
 import serial
 import serial.rfc2217
-import logging
 
-class Redirector:
+class Redirector(object):
     def __init__(self, serial_instance, socket, debug=None):
         self.serial = serial_instance
         self.socket = socket
@@ -59,12 +59,9 @@
                 if data:
                     # escape outgoing data when needed (Telnet IAC (0xff) character)
                     data = serial.to_bytes(self.rfc2217.escape(data))
-                    self._write_lock.acquire()
-                    try:
+                    with self._write_lock:
                         self.socket.sendall(data)       # send it over TCP
-                    finally:
-                        self._write_lock.release()
-            except socket.error, msg:
+            except socket.error as msg:
                 self.log.error('%s' % (msg,))
                 # probably got disconnected
                 break
@@ -73,11 +70,8 @@
 
     def write(self, data):
         """thread safe socket write with no data escaping. used to send telnet stuff"""
-        self._write_lock.acquire()
-        try:
+        with self._write_lock:
             self.socket.sendall(data)
-        finally:
-            self._write_lock.release()
 
     def writer(self):
         """loop forever and copy socket->serial"""
@@ -87,7 +81,7 @@
                 if not data:
                     break
                 self.serial.write(serial.to_bytes(self.rfc2217.filter(data)))
-            except socket.error, msg:
+            except socket.error as msg:
                 self.log.error('%s' % (msg,))
                 # probably got disconnected
                 break
@@ -198,7 +192,7 @@
             ser.applySettingsDict(settings)
         except KeyboardInterrupt:
             break
-        except socket.error, msg:
+        except socket.error as msg:
             logging.error('%s' % (msg,))
 
     logging.info('--- exit ---')
diff --git a/examples/setup-miniterm-py2exe.py b/examples/setup-miniterm-py2exe.py
index bb5120e..0df67ee 100644
--- a/examples/setup-miniterm-py2exe.py
+++ b/examples/setup-miniterm-py2exe.py
@@ -1,15 +1,18 @@
 # setup script for py2exe to create the miniterm.exe
-# $Id: setup-miniterm-py2exe.py,v 1.1 2005-09-21 19:51:19 cliechti Exp $
 
 from distutils.core import setup
-import glob, sys, py2exe, os
+import glob
+import os
+import sys
+import py2exe
 
 sys.path.insert(0, '..')
 
-sys.argv.extend("py2exe --bundle 1".split())
-
 import serial.tools.miniterm
 
+
+sys.argv.extend("py2exe --bundle 1".split())
+
 setup(
     name = 'miniterm',
     zipfile = None,
diff --git a/examples/setup-rfc2217_server-py2exe.py b/examples/setup-rfc2217_server-py2exe.py
index 54c8dfa..4c98dd7 100644
--- a/examples/setup-rfc2217_server-py2exe.py
+++ b/examples/setup-rfc2217_server-py2exe.py
@@ -1,8 +1,10 @@
-# setup script for py2exe to create the miniterm.exe
-# $Id$
+# setup script for py2exe to create the rfc2217_server.exe
 
 from distutils.core import setup
-import glob, sys, py2exe, os
+import glob
+import os
+import sys
+import py2exe
 
 sys.path.insert(0, '..')
 
diff --git a/examples/setup-wxTerminal-py2exe.py b/examples/setup-wxTerminal-py2exe.py
index 21b9c94..2ecebb5 100644
--- a/examples/setup-wxTerminal-py2exe.py
+++ b/examples/setup-wxTerminal-py2exe.py
@@ -1,7 +1,8 @@
 # This is a setup.py example script for the use with py2exe
 from distutils.core import setup
+import os
+import sys
 import py2exe
-import sys, os
 
 #this script is only useful for py2exe so just run that distutils command.
 #that allows to run it with a simple double click.
@@ -31,5 +32,5 @@
     version = "0.1",
     author = "Chris Liechti",
     author_email = "[email protected]",
-    url = "http://pyserial.sf.net",
+    url = "https://pyserial.github.io/pyserial/",
 )
diff --git a/examples/tcp_serial_redirect.py b/examples/tcp_serial_redirect.py
index 8900ca9..e821b74 100644
--- a/examples/tcp_serial_redirect.py
+++ b/examples/tcp_serial_redirect.py
@@ -12,13 +12,8 @@
 import socket
 import codecs
 import serial
-try:
-    True
-except NameError:
-    True = 1
-    False = 0
 
-class Redirector:
+class Redirector(object):
     def __init__(self, serial_instance, socket, ser_newline=None, net_newline=None, spy=False):
         self.serial = serial_instance
         self.socket = socket
@@ -55,12 +50,9 @@
                         # XXX fails for CR+LF in input when it is cut in half at the begin or end of the string
                         data = net_newline.join(data.split(ser_newline))
                     # escape outgoing data when needed (Telnet IAC (0xff) character)
-                    self._write_lock.acquire()
-                    try:
+                    with self._write_lock:
                         self.socket.sendall(data)           # send it over TCP
-                    finally:
-                        self._write_lock.release()
-            except socket.error, msg:
+            except socket.error as msg:
                 sys.stderr.write('ERROR: %s\n' % msg)
                 # probably got disconnected
                 break
@@ -68,11 +60,8 @@
 
     def write(self, data):
         """thread safe socket write with no data escaping. used to send telnet stuff"""
-        self._write_lock.acquire()
-        try:
+        with self._write_lock:
             self.socket.sendall(data)
-        finally:
-            self._write_lock.release()
 
     def writer(self):
         """loop forever and copy socket->serial"""
@@ -90,7 +79,7 @@
                 if self.spy:
                     sys.stdout.write(codecs.escape_encode(data)[0])
                     sys.stdout.flush()
-            except socket.error, msg:
+            except socket.error as msg:
                 sys.stderr.write('ERROR: %s\n' % msg)
                 # probably got disconnected
                 break
@@ -287,7 +276,7 @@
 
     try:
         ser.open()
-    except serial.SerialException, e:
+    except serial.SerialException as e:
         sys.stderr.write("Could not open serial port %s: %s\n" % (ser.portstr, e))
         sys.exit(1)
 
@@ -319,7 +308,7 @@
             connection.close()
         except KeyboardInterrupt:
             break
-        except socket.error, msg:
+        except socket.error as msg:
             sys.stderr.write('ERROR: %s\n' % msg)
 
     sys.stderr.write('\n--- exit ---\n')
diff --git a/examples/wxSerialConfigDialog.py b/examples/wxSerialConfigDialog.py
index b8f833b..6b1a1db 100644
--- a/examples/wxSerialConfigDialog.py
+++ b/examples/wxSerialConfigDialog.py
@@ -12,11 +12,6 @@
 SHOW_TIMEOUT    = 1<<3
 SHOW_ALL = SHOW_BAUDRATE|SHOW_FORMAT|SHOW_FLOW|SHOW_TIMEOUT
 
-try:
-    enumerate
-except NameError:
-    def enumerate(sequence):
-        return zip(range(len(sequence)), sequence)
 
 class SerialConfigDialog(wx.Dialog):
     """Serial Port configuration dialog, to be used with pySerial 2.0+
@@ -28,7 +23,7 @@
        found in this module (not the class)."""
 
     def __init__(self, *args, **kwds):
-        #grab the serial keyword and remove it from the dict
+        # grab the serial keyword and remove it from the dict
         self.serial = kwds['serial']
         del kwds['serial']
         self.show = SHOW_ALL
@@ -74,7 +69,7 @@
                 preferred_index = n
         self.combo_box_port.SetSelection(preferred_index)
         if self.show & SHOW_BAUDRATE:
-            #fill in baud rates and select current setting
+            # fill in baud rates and select current setting
             self.choice_baudrate.Clear()
             for n, baudrate in enumerate(self.serial.BAUDRATES):
                 self.choice_baudrate.Append(str(baudrate))
@@ -82,21 +77,21 @@
                     index = n
             self.choice_baudrate.SetSelection(index)
         if self.show & SHOW_FORMAT:
-            #fill in data bits and select current setting
+            # fill in data bits and select current setting
             self.choice_databits.Clear()
             for n, bytesize in enumerate(self.serial.BYTESIZES):
                 self.choice_databits.Append(str(bytesize))
                 if self.serial.bytesize == bytesize:
                     index = n
             self.choice_databits.SetSelection(index)
-            #fill in stop bits and select current setting
+            # fill in stop bits and select current setting
             self.choice_stopbits.Clear()
             for n, stopbits in enumerate(self.serial.STOPBITS):
                 self.choice_stopbits.Append(str(stopbits))
                 if self.serial.stopbits == stopbits:
                     index = n
             self.choice_stopbits.SetSelection(index)
-            #fill in parities and select current setting
+            # fill in parities and select current setting
             self.choice_parity.Clear()
             for n, parity in enumerate(self.serial.PARITIES):
                 self.choice_parity.Append(str(serial.PARITY_NAMES[parity]))
@@ -104,7 +99,7 @@
                     index = n
             self.choice_parity.SetSelection(index)
         if self.show & SHOW_TIMEOUT:
-            #set the timeout mode and value
+            # set the timeout mode and value
             if self.serial.timeout is None:
                 self.checkbox_timeout.SetValue(False)
                 self.text_ctrl_timeout.Enable(False)
@@ -113,11 +108,11 @@
                 self.text_ctrl_timeout.Enable(True)
                 self.text_ctrl_timeout.SetValue(str(self.serial.timeout))
         if self.show & SHOW_FLOW:
-            #set the rtscts mode
+            # set the rtscts mode
             self.checkbox_rtscts.SetValue(self.serial.rtscts)
-            #set the rtscts mode
+            # set the rtscts mode
             self.checkbox_xonxoff.SetValue(self.serial.xonxoff)
-        #attach the event handlers
+        # attach the event handlers
         self.__attach_events()
 
     def __set_properties(self):
@@ -231,23 +226,23 @@
         wx.InitAllImageHandlers()
 
         ser = serial.Serial()
-        print ser
-        #loop until cancel is pressed, old values are used as start for the next run
-        #show the different views, one after the other
-        #value are kept.
+        print(ser)
+        # loop until cancel is pressed, old values are used as start for the next run
+        # show the different views, one after the other
+        # value are kept.
         for flags in (SHOW_BAUDRATE, SHOW_FLOW, SHOW_FORMAT, SHOW_TIMEOUT, SHOW_ALL):
             dialog_serial_cfg = SerialConfigDialog(None, -1, "", serial=ser, show=flags)
             self.SetTopWindow(dialog_serial_cfg)
             result = dialog_serial_cfg.ShowModal()
-            print ser
+            print(ser)
             if result != wx.ID_OK:
                 break
-        #the user can play around with the values, CANCEL aborts the loop
+        # the user can play around with the values, CANCEL aborts the loop
         while 1:
             dialog_serial_cfg = SerialConfigDialog(None, -1, "", serial=ser)
             self.SetTopWindow(dialog_serial_cfg)
             result = dialog_serial_cfg.ShowModal()
-            print ser
+            print(ser)
             if result != wx.ID_OK:
                 break
         return 0
diff --git a/examples/wxTerminal.py b/examples/wxTerminal.py
index 646c272..5ba8ba7 100644
--- a/examples/wxTerminal.py
+++ b/examples/wxTerminal.py
@@ -48,7 +48,7 @@
 
 class TerminalSettingsDialog(wx.Dialog):
     """Simple dialog with common terminal settings like echo, newline mode."""
-    
+
     def __init__(self, *args, **kwds):
         self.settings = kwds['settings']
         del kwds['settings']
@@ -98,14 +98,14 @@
     def __attach_events(self):
         self.Bind(wx.EVT_BUTTON, self.OnOK, id = self.button_ok.GetId())
         self.Bind(wx.EVT_BUTTON, self.OnCancel, id = self.button_cancel.GetId())
-    
+
     def OnOK(self, events):
         """Update data wil new values and close dialog."""
         self.settings.echo = self.checkbox_echo.GetValue()
         self.settings.unprintable = self.checkbox_unprintable.GetValue()
         self.settings.newline = self.radio_box_newline.GetSelection()
         self.EndModal(wx.ID_OK)
-    
+
     def OnCancel(self, events):
         """Do not update data but close dialog."""
         self.EndModal(wx.ID_CANCEL)
@@ -115,18 +115,18 @@
 
 class TerminalFrame(wx.Frame):
     """Simple terminal program for wxPython"""
-    
+
     def __init__(self, *args, **kwds):
         self.serial = serial.Serial()
         self.serial.timeout = 0.5   #make sure that the alive event can be checked from time to time
         self.settings = TerminalSetup() #placeholder for the settings
         self.thread = None
-        self.alive = threading.Event()               
+        self.alive = threading.Event()
         # begin wxGlade: TerminalFrame.__init__
         kwds["style"] = wx.DEFAULT_FRAME_STYLE
         wx.Frame.__init__(self, *args, **kwds)
         self.text_ctrl_output = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_READONLY)
-        
+
         # Menu Bar
         self.frame_terminal_menubar = wx.MenuBar()
         self.SetMenuBar(self.frame_terminal_menubar)
@@ -162,7 +162,7 @@
             self.alive.clear()          #clear alive event for thread
             self.thread.join()          #wait until thread has finished
             self.thread = None
-        
+
     def __set_properties(self):
         # begin wxGlade: TerminalFrame.__set_properties
         self.SetTitle("Serial Terminal")
@@ -237,7 +237,7 @@
             if result == wx.ID_OK or event is not None:
                 try:
                     self.serial.open()
-                except serial.SerialException, e:
+                except serial.SerialException as e:
                     dlg = wx.MessageDialog(None, str(e), "Serial Port Error", wx.OK | wx.ICON_ERROR)
                     dlg.ShowModal()
                     dlg.Destroy()
@@ -265,7 +265,7 @@
         dialog = TerminalSettingsDialog(None, -1, "", settings=self.settings)
         result = dialog.ShowModal()
         dialog.Destroy()
-        
+
     def OnKey(self, event):
         """Key event handler. if the key is in the ASCII range, write it to the serial port.
            Newline handling and local echo is also done here."""
@@ -286,7 +286,7 @@
                     self.text_ctrl_output.WriteText(char)
                 self.serial.write(char)         #send the charcater
         else:
-            print "Extra Key:", code
+            print("Extra Key:", code)
 
     def OnSerialRead(self, event):
         """Handle input from the serial port."""
@@ -314,7 +314,7 @@
                 event = SerialRxEvent(self.GetId(), text)
                 self.GetEventHandler().AddPendingEvent(event)
                 #~ self.OnSerialRead(text)         #output text in window
-            
+
 # end of class TerminalFrame