1#! python 2# 3# Python Serial Port Extension for Win32, Linux, BSD, Jython 4# see __init__.py 5# 6# This module implements a special URL handler that uses the port listing to 7# find ports by searching the string descriptions. 8# 9# (C) 2011 Chris Liechti <cliechti@gmx.net> 10# this is distributed under a free software license, see license.txt 11# 12# URL format: hwgrep://regexp 13 14import serial 15import serial.tools.list_ports 16 17class Serial(serial.Serial): 18 """Just inherit the native Serial port implementation and patch the open function.""" 19 20 def setPort(self, value): 21 """translate port name before storing it""" 22 if isinstance(value, basestring) and value.startswith('hwgrep://'): 23 serial.Serial.setPort(self, self.fromURL(value)) 24 else: 25 serial.Serial.setPort(self, value) 26 27 def fromURL(self, url): 28 """extract host and port from an URL string""" 29 if url.lower().startswith("hwgrep://"): url = url[9:] 30 # use a for loop to get the 1st element from the generator 31 for port, desc, hwid in serial.tools.list_ports.grep(url): 32 return port 33 else: 34 raise serial.SerialException('no ports found matching regexp %r' % (url,)) 35 36 # override property 37 port = property(serial.Serial.getPort, setPort, doc="Port setting") 38 39# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 40if __name__ == '__main__': 41 #~ s = Serial('hwgrep://ttyS0') 42 s = Serial(None) 43 s.port = 'hwgrep://ttyS0' 44 print s 45 46