2017-01-08 9 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 일 경우, 상이한 분할 알고리즘이 적용된다

: 연속 공백의 런 는 단일 분리 문자로 간주되며 문자열에 선행 공백 또는 후행 공백이 있으면 결과에 시작 또는 끝에 공백 문자열이 포함되지 않습니다. 따라서 빈 문자열이나 공백으로 구성된 문자열을 없음 구분 기호로 분리하면 []가 반환됩니다. 귀하의 정규식 일하는

...

+0

내 대답이 'gs2'계정으로 업데이트되고 해당 문자열에 적절한 색인이 제공됩니다. –

0

, 나는 스크립트가 라인을 읽고 있던 방법은 내가 빈 공간이 후 내 라인을 읽어 보지 않았 테스트 때와 약간의 왜곡 된 생각합니다. 나는 lines 변수를 추가했다. 나는 이것을 달성하기위한 더 파이썬적인 방법이있을 것이라고 확신하지만 작동한다.

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'