我想用Python获取我的机器的hostname
。我可以使用socket
获取主机名。现在,我需要将此hostname
与colo
列表进行比较,看看hostname
是否属于哪个datacenter
。它来自dc1或dc2或dc3。
#!/usr/bin/python
colo = ['dc1', 'dc2', 'dc3']
hostname = socket.gethostname()
如何检查该主机名是否来自哪个colo,然后将其打印出colo?
示例主机名将是这样的 -
dc1dbx1145.dc1.host.com
dc1dbx1146.dc1.host.com
dc1dbx1147.dc1.host.com
dc1dbx1148.dc1.host.com
答案 0 :(得分:1)
在.
上拆分并测试第二个值:
location = hostname.split('.')[1]
演示:
>>> hostname = 'dc1dbx1145.dc1.host.com'
>>> hostname.split('.')[1]
'dc1'
您可能想要验证您找到的名称确实是一个公认的位置:
if location not in colo:
print 'Not a recognized location'
如果您不知道该位置可能是哪个部分,请使用:
location = next((part for part in hostname.split('.') if part in colo), None)
if location is None:
print 'Not a recognized location'
答案 1 :(得分:0)
如果您的主机名一致且始终采用此格式,您可以尝试以下内容:
data = hostname.split('.')
if len(data) == 4 and data[1] in colo:
print "Datacenter: %s" % data[1]
else:
print "Unknown hostname"
如果您在获取主机名时遇到错误,if
语句就是为了避免异常。
答案 2 :(得分:0)
您可以使用以下代码段:
colo = ['dc1', 'dc2', 'dc3']
hostname = socket.gethostname()
term= hostname.split('.')[1]
print filter(lambda x: term in x,colo)