summaryrefslogtreecommitdiff
path: root/serial/tools/list_ports_linux.py
diff options
context:
space:
mode:
Diffstat (limited to 'serial/tools/list_ports_linux.py')
-rw-r--r--serial/tools/list_ports_linux.py19
1 files changed, 18 insertions, 1 deletions
diff --git a/serial/tools/list_ports_linux.py b/serial/tools/list_ports_linux.py
index d36254b..72c6b4a 100644
--- a/serial/tools/list_ports_linux.py
+++ b/serial/tools/list_ports_linux.py
@@ -12,9 +12,26 @@
# SPDX-License-Identifier: BSD-3-Clause
import glob
+import re
import os
+def numsplit(text):
+ """\
+ Convert string into a list of texts and numbers in order to support a
+ natural sorting.
+ """
+ result = []
+ for group in re.split(r'(\d+)', text):
+ if group:
+ try:
+ group = int(group)
+ except ValueError:
+ pass
+ result.append(group)
+ return result
+
+
class SysFS(object):
"""Wrapper for easy sysfs access and device info"""
@@ -87,7 +104,7 @@ class SysFS(object):
return self.dev == other.dev
def __lt__(self, other):
- return self.dev < other.dev
+ return numsplit(self.dev) < numsplit(other.dev)
def __getitem__(self, index):
"""Item access: backwards compatible -> (port, desc, hwid)"""