diff options
author | Chris Liechti <cliechti@gmx.net> | 2015-08-04 01:07:45 +0200 |
---|---|---|
committer | Chris Liechti <cliechti@gmx.net> | 2015-08-04 01:07:45 +0200 |
commit | 4caf6a58575a4a7dc709bc8eb40793a1ec477a56 (patch) | |
tree | 7c919a941a3c0a53a6008abbf13796ac70dcf159 /examples | |
parent | 773991e5547133cd9aab4529247815047f59843a (diff) | |
download | pyserial-git-4caf6a58575a4a7dc709bc8eb40793a1ec477a56.tar.gz |
work on python 3 compatibility
Diffstat (limited to 'examples')
-rw-r--r-- | examples/port_publisher.py | 36 | ||||
-rw-r--r-- | examples/rfc2217_server.py | 26 | ||||
-rw-r--r-- | examples/setup-miniterm-py2exe.py | 11 | ||||
-rw-r--r-- | examples/setup-rfc2217_server-py2exe.py | 8 | ||||
-rw-r--r-- | examples/setup-wxTerminal-py2exe.py | 5 | ||||
-rw-r--r-- | examples/tcp_serial_redirect.py | 25 | ||||
-rw-r--r-- | examples/wxSerialConfigDialog.py | 37 | ||||
-rw-r--r-- | examples/wxTerminal.py | 22 |
8 files changed, 78 insertions, 92 deletions
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 @@ Multi-port serial<->TCP/IP forwarder. 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 @@ class Forwarder(ZeroconfService): 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 @@ class Forwarder(ZeroconfService): 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 @@ class Forwarder(ZeroconfService): 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 @@ class Forwarder(ZeroconfService): 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 @@ class Forwarder(ZeroconfService): 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 @@ class Forwarder(ZeroconfService): 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 @@ class Forwarder(ZeroconfService): # 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 @@ class Forwarder(ZeroconfService): 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 running as daemon, write to syslog. Otherwise write to stdout. 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 running as daemon, write to syslog. Otherwise write to stdout. 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 @@ If running as daemon, write to syslog. Otherwise write to stdout. 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 @@ If running as daemon, write to syslog. Otherwise write to stdout. 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 @@ If running as daemon, write to syslog. Otherwise write to stdout. 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 @@ class Redirector: 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 @@ class Redirector: 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 @@ class Redirector: 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 @@ it waits for the next connect. 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 @@ setup( version = "0.1", author = "Chris Liechti", author_email = "cliechti@gmx.net", - 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 threading 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 @@ class Redirector: # 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 @@ class Redirector: 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 @@ class Redirector: 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 @@ it waits for the next connect. 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 @@ it waits for the next connect. 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_FLOW = 1<<2 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 @@ class SerialConfigDialog(wx.Dialog): 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 @@ class SerialConfigDialog(wx.Dialog): 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 @@ class SerialConfigDialog(wx.Dialog): 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 @@ class SerialConfigDialog(wx.Dialog): 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 @@ class SerialConfigDialog(wx.Dialog): 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 @@ class MyApp(wx.App): 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 TerminalSetup: 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 @@ class TerminalSettingsDialog(wx.Dialog): 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 TerminalSettingsDialog(wx.Dialog): 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 @@ class TerminalFrame(wx.Frame): 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 @@ class TerminalFrame(wx.Frame): 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 @@ class TerminalFrame(wx.Frame): 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 @@ class TerminalFrame(wx.Frame): 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 @@ class TerminalFrame(wx.Frame): event = SerialRxEvent(self.GetId(), text) self.GetEventHandler().AddPendingEvent(event) #~ self.OnSerialRead(text) #output text in window - + # end of class TerminalFrame |