2013-09-26 7 views
0

아래의 스크립트를 작성했는데 정상적으로 작동합니다. 그러나 생산량은 우호적이지 않습니다 (아래 참조). 나는, '[], 제안하십시오 첫 번째 줄은 호스트 이름과 IP를 표시하고 (제거 할python - print output

('testhostname', [], ['10.10.10.10']) 
cannot resolve hostname: 10.10.10.11 

import socket 
pfile = open ('C:\\Python27\\scripts\\test.txt') 
while True: 
    IP = pfile.readline() 
    if not IP: 
     break 
    try: 
     host = socket.gethostbyaddr(IP.rstrip()) 
     print host 
    except socket.herror, err: 
     print "cannot resolve hostname: ", IP 
pfile.close() 
+0

@Thomas :'gethostbyaddr'는 역방향 조회를 수행하고 별칭과 대체 IP와 함께 호스트 이름을 제공하므로 무의미하지 않습니다. [the docs] (http://docs.python.org/2/library/socket.html#socket.gethostbyaddr)를 참조하십시오. – Blckknght

+0

맞아, 내 바보 같은 말을 지울거야. – Thomas

답변

4

보다는 gethostbyaddr에 의해 반환되는 host 튜플의 모든 인쇄, I 당신은 형식을 통해, 나는 str.format미터을 사용하는 것이 좋습니다 더 제어하려면

hostname, alias_list, ip_addr_list = gethostbyaddr(IP.rstrip()) 
print hostname, ip_addr_list # or ip_addr_list[0] if you only want the one IP 

: 당신이 적합을 볼 당신이 다음 인쇄 할 수 별도의 변수로 풀고 제안 ethod :

print "hostname: {}, IP(s): {}".format(hostname, ", ".join(ip_addr_list)) 

또한, 몇 가지 다른 코드 제안은 (직접 주요 질문에 관련되지 않음) :

  • 수동으로 열고 파일을 닫는 대신 with 문을 사용합니다.
  • 을 사용하지 않고 매번 pfile.readline()을 호출하는 대신 파일 개체를 직접 (for IP in pfile:) 반복합니다.
  • 이전 양식 대신 쉼표 (Python 2에서는 더 이상 사용되지 않으며 Python 3에서는 더 이상 존재하지 않음)보다는 구문 except socek.herror as err을 사용하십시오.