Python 正则读取 /etc/resolv.conf 仅返回 IP 地址,感觉快成功了
我在写一个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>
3 个回答
1
Python3
def get_resolvers():
"""
if using WSL will access /etc/resolv.conf and parse the host address
:return: str ip address
"""
resolvers = []
try:
with open("/etc/resolv.conf", encoding='utf-8') as resolvconf:
for line in resolvconf.readlines():
line = line.split('#', 1)[0].rstrip()
if 'nameserver' in line:
resolvers.append(line.split()[1])
return resolvers[0] if len(resolvers) > 0 else "127.0.0.1"
except Exception as err:
return "127.0.0.1"
2
另一种方法
>>> data=open("/etc/resolv.conf").read().split()
>>> for item in data:
... if len( item.split(".") ) == 4:
... print item
...
192.168.0.1
2
re.search
会返回一个叫做 匹配对象。这个对象有很多属性,可以告诉你关于匹配的情况。
如果你想获取整个匹配的文本,可以使用 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"