esphome-flasher/esphomeflasher/helpers.py
2018-11-07 21:24:25 +01:00

38 lines
994 B
Python

from __future__ import print_function
import os
import sys
import serial
DEVNULL = open(os.devnull, 'w')
def list_serial_ports():
# from https://github.com/pyserial/pyserial/blob/master/serial/tools/list_ports.py
from serial.tools.list_ports import comports
result = []
for port, desc, info in comports():
if not port or "VID:PID" not in info:
continue
split_desc = desc.split(' - ')
if len(split_desc) == 2 and split_desc[0] == split_desc[1]:
desc = split_desc[0]
result.append((port, desc))
result.sort()
return result
def prevent_print(func, *args, **kwargs):
orig_sys_stdout = sys.stdout
sys.stdout = DEVNULL
try:
return func(*args, **kwargs)
except serial.SerialException as err:
from esphomeflasher.common import EsphomeflasherError
raise EsphomeflasherError("Serial port closed: {}".format(err))
finally:
sys.stdout = orig_sys_stdout
pass