2013-09-03 2 views
0

아래의 코드를 사용하여 목록으로 텍스트 파일 (hosts.txt)을 읽은 다음 각 항목을 IP로 해결하려고합니다. socket.gethostbyname() socket.gaierror : 도메인 목록을 읽을 때 [Errno 11004]

import socket 

non_blank_count = 0 

with open('hosts.txt') as infp: 
    for line in infp: 
     non_blank_count += 1 

print 'IPs to be resolved %d' % non_blank_count  


with open('hosts.txt') as fp: 
    content = fp.readlines() 

i=0 

while i < non_blank_count: 
    print("Host: %s : IP: %s") % (content[i], socket.gethostbyname(content[i])) 
    i = i+1 

내가이 작업을 수행하려고 할 때마다

나는 다음과 같은 오류 메시지가 :

Traceback (most recent call last): File "test.py", line 18, in print("Host: %s : IP: %s") % (content[i], socket.gethostbyname(content[i])) socket.gaierror: [Errno 11004] getaddrinfo failed

내가 사용 유휴 상태에서하려고하면 그것을 다음은 잘 작동 :

>>> import socket 
>>> socket.gethostbyname("google.com") 
'74.125.237.99' 

나는 이중 따옴표와 관련이 있다고 생각하지만 잘 모르겠다. 몇 가지 변형을 시도했으며 모두 동일한 결과를 가지고있다. (이중 따옴표로 묶인 호스트 포함)

내 hosts.txt 파일의 형식은 다음과 같습니다.

site.com 
www.site.subsite.com 
im.another.site.com 
etc.com 

의견을 보내 주시면 감사하겠습니다.

답변

1

file.readlines 줄 바꿈을 제거하지 않은 문자열 반환 목록. 당신은 당신이 라인으로 파일 라인 대신 file.readlines를 사용하는 반복자로 사용할 파일을 처리 할 때 str.strip

를 사용하여 제거 할 수 있습니다

import socket 

with open('hosts.txt') as fp: 
    for line in fp: 
     host = line.strip() 
     print "Host: {} IP: {}".format(host, socket.gethostbyname(host)) 
+0

좋은 지적, 감사합니다, 그것은 많은 청소 :) – NULLZ

1

각 주소에서 후행 '\ n'을 제거해야합니다. 다음을 시도하십시오.

content[i].rstrip('\n'), socket.gethostbyname(content[i].rstrip('\n')) 
관련 문제