rxDrv = re.compile(r'^driver\:\s+\w+$', re.MULTILINE)
allItf = netifaces.interfaces()
for item in allItf:
# get driver info
cmd = f"{item}"
p1 = subprocess.run(["ethtool", "-i", cmd], capture_output=True, text=True)
qqq = repr(p1.stdout)
drvName = rxDrv.search(qqq).group()
print(drvName)
Получаю в результате None вместо имен драйверов. ЧЯДНТ?
Здравствуйте, Lloret, Вы писали:
L>L> rxDrv = re.compile(r'^driver\:\s+\w+$', re.MULTILINE)
L> allItf = netifaces.interfaces()
L> for item in allItf:
L> # get driver info
L> cmd = f"{item}"
L> p1 = subprocess.run(["ethtool", "-i", cmd], capture_output=True, text=True)
L> qqq = repr(p1.stdout)
L> drvName = rxDrv.search(qqq).group()
L> print(drvName)
L>
Версии 3.9 под рукой нет, поэтому быстро проверить не могу, но использование repr() для получения строки вызывает у меня сильнейшее подозрение. На тех версиях питона, которые у меня есть, строка конвертируется в печатаемый вид, что в частности вызывает преобразование концов строк в фактический текст из обратного слэша и символа "n". Разумеется, регулярка из кода в таком тексте ничего не найдёт, ибо не сопоставит конец строки. Если там на выходе байты, а надо получить строку, то это делается иначе; например,
вот тут приводят два возможных решения:
1. преобразовать строку, используя метод decode;
2. использовать байтовую регулярку вместо строковой: rb'...'.