0

以下のスクリプトを作成しましたが、正常に動作します。しかし、出力は友好的ではありません (以下を参照)。最初の行にホスト名と IP のみを表示し、(,'[] を削除してください。提案してください

('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()
4

1 に答える 1

4

hostによって返されるすべてのタプルを出力するのではなく、gethostbyaddr個別の変数にアンパックして、必要に応じて出力できるようにすることをお勧めします。

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

フォーマットをより細かく制御したい場合は、次のstr.format方法を使用することをお勧めします。

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

また、他のいくつかのコードの提案 (主な質問とは直接関係ありません):

  • withファイルを手動で開いたり閉じたりするのではなく、ステートメントを使用してください。
  • 毎回使用して呼び出すfor IP in pfile:のではなく、ファイル オブジェクトを ( を使用して) 直接反復処理します。while True:pfile.readline()
  • except socek.herror as errコンマを含む古い形式ではなく、構文を使用してください(これは Python 2 で廃止され、Python 3 には存在しなくなりました)。
于 2013-09-26T20:32:17.653 に答える