2013-03-21 80 views
2

我有一個使用AWS SDK(PHP),以更新與友好的主機名以及爲每個服務器將當前EC2私有IP的/ etc/hosts文件一個cronjob 。蟒蛇 - 從每行的/ etc/hosts文件得到主機名值

在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 

所有我要找的是創造只用主機名的列表(服務器-1,服務器-2等)。有人可以幫我嗎?

回答

6
for line in hosts: 
     print line.split()[1:] 
+0

正是我所需要的,謝謝!一旦時間延遲完成,我會接受你的回答,謝謝! – Joe 2013-03-21 21:11:32

1

我知道這個問題是舊的,在技術上解決,但我只是想我會提到,有(現在),將讀庫(寫)hosts文件: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%的測試覆蓋。

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