我正在编写一个脚本,该脚本查看设备的主机名并基于此应用地理配置。它目前正在使用我在网上找到的脚本工作。
DEVICE_NAME = net_connect.send_command('show version')
HOSTNAME = re.search(r'(S+)suptime', DEVICE_NAME, re.M).group(1)
if re.search('ttreda.|tteu.+', HOSTNAME):
TIMEZONE = 'GMT 0 0'
SUMMERTIME = 'BST recurring'
else:
TIMEZONE = 'EST -5 0'
SUMMERTIME = 'EDT recurring'
但是我想通过使用show run | include hostname来使它更简洁一些。我发现这个搜索字符串,但失败
DEVICE_NAME = net_connect.send_command('show run | include hostname')
HOSTNAME = re.search(r'(S+)shostname', DEVICE_NAME, re.M).group(1)
print(HOSTNAME)
这会引发以下异常:
AttributeError: 'NoneType' object has no attribute 'group'
由于hostname
总是出现在您需要提取的单词之前,因此您需要
match = re.search(r'hostnames+(S+)', DEVICE_NAME)
if match:
print(match.group(1))
注意,在访问group(1)
值之前,最好检查是否有匹配,以避免AttributeError: 'NoneType' object has no attribute 'group'
问题。
注意,您不需要re.M
选项,因为它只修改正则表达式中^
和$
锚的行为,而您的锚两者都没有。