Python regex читает /etc/resolv.conf и возвращает только ip адрес, думаю, его почти нет, - PullRequest
1 голос
/ 29 марта 2011

Я пишу скрипт на python, и у меня возникла проблема с определенной функцией, она должна открывать файл /etc/resolv.conf, читать его построчно и возвращать только IP-адреса. Несмотря на то, что он, похоже, находит IP-адрес, он не говорит мне только о том, какая часть памяти есть в какой-либо идее, как заставить его сообщить мне соответствующую строку.

Вот функция:

def get_resolv():
    nameservers=[]
    rconf = open("/etc/resolv.conf","r")
    line = rconf.readline()
    while line:
        try:
            ip = re.search(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b",line)


        except:
            ip = "none set"
        print ip
        nameservers.append(ip)
        line= rconf.readline()

    return nameservers

вот выход при вызове:

None
<_sre.SRE_Match object at 0xb76964b8>
<_sre.SRE_Match object at 0xb7696db0>

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Другой способ

>>> data=open("/etc/resolv.conf").read().split()
>>> for item in data:
...     if len( item.split(".") ) == 4:
...          print item
...
192.168.0.1
2 голосов
/ 29 марта 2011

re.search возвращает Match Object . Это объект, имеющий ряд атрибутов, которые сообщают вам о совпадении.

Чтобы получить весь подобранный текст, используйте ip.group(0) или ip.group().

Также re.search не выдает исключение, если не найдено совпадений, и вместо этого возвращает None. Поэтому ваш код должен выглядеть примерно так:

ip = re.search(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b",line)

if ip is None:
    ip = "none set"
...