我有一个使用AWS开发工具包(PHP)的cronjob来更新/ etc / hosts文件,该文件写入当前的EC2私有IP以及每个服务器的友好主机名。
在Python中,我尝试逐行读取/ etc / hosts文件,然后拔出主机名。
示例/ etc / hosts:
127.0.0.1 localhost localhost.localdomain
10.10.10.10 server-1
10.10.10.11 server-2
10.10.10.12 server-3
10.10.10.13 server-4
10.10.10.14 server-5
在Python中,到目前为止我只有:
hosts = open('/etc/hosts','r')
for line in hosts:
print line
我所寻找的只是创建一个只包含主机名(server-1,server-2等)的列表。有人可以帮助我吗?
答案 0 :(得分:6)
for line in hosts:
print line.split()[1:]
答案 1 :(得分:4)
我知道这个问题已经过时并在技术上已经解决了,但我只是想提一下(现在)有一个库可以读取(并写入)一个主机文件:https://github.com/jonhadfield/python-hosts
以下结果与接受的答案相同:
from python_hosts import Hosts
[entry.names for entry in hosts.Hosts().entries
if entry.entry_type in ['ipv4', 'ipv6']
与上述答案不同 - 公平的说法非常简单,做了什么并且不需要额外的库 - python-hosts
将处理行注释(但不是内联注释)并且具有100%的测试覆盖率
答案 2 :(得分:0)
这应该返回所有主机名,并且也应该处理内联注释。
def get_etc_hostnames():
"""
Parses /etc/hosts file and returns all the hostnames in a list.
"""
with open('/etc/hosts', 'r') as f:
hostlines = f.readlines()
hostlines = [line.strip() for line in hostlines
if not line.startswith('#') and line.strip() != '']
hosts = []
for line in hostlines:
hostnames = line.split('#')[0].split()[1:]
hosts.extend(hostnames)
return hosts