如何在Python中比较列表和实际字符串?

2024-10-16 20:40:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python获取我的机器的hostname。我可以使用socket获取主机名。现在我需要将这个hostnamecolo列表进行比较,看看这个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

Tags: com机器host列表binusrsockethostname
3条回答

您可以使用以下代码段:

colo = ['dc1', 'dc2', 'dc3']
hostname = socket.gethostname()
term= hostname.split('.')[1]
print filter(lambda x: term in x,colo)

如果您的主机名是一致的并且始终使用此格式,您可以尝试以下操作:

data = hostname.split('.')
if len(data) == 4 and data[1] in colo:
     print "Datacenter: %s" % data[1]
else:
     print "Unknown hostname" 

这里的if语句只是为了避免在获取主机名时遇到错误时出现异常。你知道吗

.上拆分并测试第二个值:

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'

相关问题 更多 >