我的/etc/hosts
文件中有以下行
54.230.202.149 gs2.ww.prod.dl.playstation.net
我要做的是,找到gs2
文件中的行/etc/hosts
并获取当前的IP地址。这就是我所拥有的,但它找不到DNS或返回IP地址。它告诉我,我当前的IP地址是“无”。
try:
with open('/etc/hosts', 'r') as f:
for line in f:
host_ip = re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b.+(?=gs2)", line)
if host_ip:
current_ip = host_ip[0].strip()
else:
current_ip = 'None'
except:
current_ip = 'Unknown'
c.execute('INTERT INTO status VALUES(?,?,?,?,?,?)',
('Current Configured IP', current_ip))
不确定问题是什么。任何帮助将不胜感激。
答案 0 :(得分:0)
使用.split()执行此操作,它会将基于空格的行拆分为单独的索引元素。
另请注意,使用此方法不需要host_ip[0].strip()
,因为在split()
操作期间会删除IP地址和主机名之间的所有空格。您可以使用host_ip[0]
。
try:
with open('/etc/hosts', 'r') as f:
for line in f:
host_ip = line.split()
if host_ip and 'gs2' in host_ip[1][0:3]:
current_ip = host_ip[0]
else:
current_ip = 'None'
except:
current_ip = 'Unknown'
来自https://docs.python.org/3/library/stdtypes.html#str.split:
(有关split()的进一步讨论,请参阅URL。)
str.split(sep = None,maxsplit = -1)
...
如果未指定sep或为None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随,则结果将在开头或结尾处不包含空字符串空白。因此,将空字符串或仅由空格组成的字符串拆分为无分隔符将返回[]。
...
答案 1 :(得分:0)
你的正则表达式正在工作,我认为脚本读取线条的方式有点偏斜,因为当我测试它时,在空白后没有读取我的线条。我最后添加了行变量。我确信有更多的pythonic方法来实现这一点,但它的工作原理。
import re
try:
with open(r'/etc/hosts') as f:
lines = [line for line in f.read().splitlines() if line]
for line in lines:
host_ip = re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b.+(?=gs2)", line)
print(host_ip)
if host_ip:
current_ip = host_ip[0].strip()
print(current_ip)
except:
current_ip = 'Unknown'