Re: Python 3.9.6 - как результат выполнения subprocess.run разобрать через Regex
От: CaptainFlint http://flint-inc.ru/
Дата: 11.09.21 01:28
Оценка: 3 (1) +1
Здравствуйте, 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'...'.
Почему же, ё-моё, ты нигде не пишешь «ё»?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.