Я довольно новичок в Python, и я нахожу некоторые проблемы с regex
В программе, над которой я работаю, у меня есть следующие строки кода:
ifconfig_result = subprocess.check_output(["ifconfig", options.interface])
print(ifconfig_result)
mac_address_search_result = re.search(r"\w\w:\w\w:\w\w:\w\w:\w\w:\w\w", ifconfig_result)
print(mac_address_search_result.group(0))
В первой строке выполняется команда ifconfig в системе Linux (с использованием модуля подпроцесса). Затем я печатаю этот вывод, я получаю этот вывод:
b'eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500\n inet 192.168.223.128 netmask 255.255.255.0 broadcast 192.168.223.255\n inet6 fe80::20c:29ff:feb9:fdf6 prefixlen 64 scopeid 0x20<link>\n ether 00:0c:29:b9:fd:f6 txqueuelen 1000 (Ethernet)\n RX packets 69731 bytes 94090876 (89.7 MiB)\n RX errors 0 dropped 0 overruns 0 frame 0\n TX packets 31405 bytes 3383293 (3.2 MiB)\n TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0\n\n'
Затем я пытаюсь использовать регулярное выражение для извлечения только адреса MA C, содержащегося в этой возвращенной «строке» (я думаю, что это не является строкой пропптера).
Проблема в том, что в этой строке выполняется регулярное выражение:
mac_address_search_result = re.search(r"\w\w:\w\w:\w\w:\w\w:\w\w:\w\w", ifconfig_result)
Я получаю следующее исключение:
Traceback (most recent call last):
File "mac_changer.py", line 46, in <module>
mac_address_search_result = re.search(r"\w\w:\w\w:\w\w:\w\w:\w\w:\w\w", ifconfig_result)
File "/usr/lib/python3.7/re.py", line 183, in search
return _compile(pattern, flags).search(string)
TypeError: cannot use a string pattern on a bytes-like object
Итак, Мне кажется, что объект ifconfig_result, возвращаемый методом check_output () объекта subprocess , - это не строка, а что-то вроде двоичного (что именно)
Почему есть ли у меня такое поведение? (Я следую учебному пособию, в котором он проиллюстрирован таким образом).
Как я могу получить проппортовую строку, чтобы я мог использовать свое регулярное выражение?