2017-01-08 12 views
0

私は私が何をしようとしている私の/etc/hostsファイル/etc/hostsからIPアドレスを取得するには?

 
54.230.202.149 gs2.ww.prod.dl.playstation.net 

に次の行を持っているが/etc/hostsファイル内の行gs2を見つけて、現在のIPアドレスを取得し、です。これは私が持っているものですが、DNSを見つけたりIPアドレスを返したりすることはありません。現在のIPアドレスが「なし」であることがわかります。

try: 
    with open('/etc/hosts', 'r') as f: 
     for line in f: 
      host_ip = re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b.+(?=gs2)", line) 
      if host_ip: 
       current_ip = host_ip[0].strip() 
      else: 
       current_ip = 'None' 
except: 
    current_ip = 'Unknown' 

c.execute('INTERT INTO status VALUES(?,?,?,?,?,?)', 
      ('Current Configured IP', current_ip)) 

問題の内容が不明です。どんな助けもありがとう。

答えて

0

これを行うには、空白に基づいて行を分割して別々のインデックス要素に分割する.split()を使用します。

この方法を使用すると、split()操作中にIPアドレスとホスト名の間のすべての空白が削除されるため、host_ip[0].strip()の必要性がなくなります。 host_ip[0]だけ使用できます。 https://docs.python.org/3/library/stdtypes.html#str.splitから

try: 
    with open('/etc/hosts', 'r') as f: 
     for line in f: 
      host_ip = line.split() 
      if host_ip and 'gs2' in host_ip[1][0:3]: 
       current_ip = host_ip[0] 
      else: 
       current_ip = 'None' 
except: 
    current_ip = 'Unknown' 

()(スプリットのさらなる議論のためのURLを参照してください)。

str.split(SEP =なし、maxsplit個= -1)

...

9月を指定またはNoneですされていない場合は、異なる分割アルゴリズムが適用される:連続する空白の実行を文字列の先頭または末尾に空白がある場合、結果には先頭または末尾に空の文字列は含まれません。したがって、空の文字列または空白文字のみの文字列をNoneのセパレータで分割すると、[]が返されます。あなたの正規表現が働いていた

...

+0

「gs2」のアカウントにmy answerを追加し、その文字列に適切なインデックスを付けました。 –

0

、私は、スクリプトがラインを読んでいた方法は、私はそれが空白の後に私の行を読んでいないテストしたときのように少し偏ったと思います。私はlines変数を追加しました。私はこれを達成するためのよりpythonic方法があると確信していますが、それは動作します。

import re 

try: 
    with open(r'/etc/hosts') as f: 
     lines = [line for line in f.read().splitlines() if line] 
     for line in lines: 
      host_ip = re.findall(r"\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b.+(?=gs2)", line) 
      print(host_ip) 
      if host_ip: 
       current_ip = host_ip[0].strip() 
       print(current_ip) 
except: 
    current_ip = 'Unknown' 
関連する問題