1

私は次のようなことをするスクリプトを持っています...

import socket

hostIP=sys.argv[1]

if socket.inet_aton(hostIP):
    # Do something with valid ip address
else:
    # Print error message

有効なアドレスに対しては正常に機能しますが、無効なアドレスを試してみると機能せず (つまり、エラー メッセージを出力して)、ソケット エラーがスローされます...

Traceback (most recent call last):
  File "addNew.py", line 35, in <module>
    if socket.inet_aton(hostIP):
socket.error: illegal IP address string passed to inet_aton

私が望むものをどのように達成できるかについての考え(つまり、ソケットエラーではなく単純なメッセージ)。

前もって感謝します、

ヒッビン

更新: 作業中の (っぽい) スクリプト

import os
import sys
import fileinput
import platform
import subprocess
import re
import socket

hostsFile = "hosts.txt"
hostsLookFile = "hosts.csv"
hostsURLFileLoc = "urls.conf"
plat = platform.system()
currentDir = "C:/Program Files/Splunk/etc/apps/gtvm/bin"
hostsFileLoc = currentDir + "/" + hostsFile
hostsLookFileLoc = currentDir + "/../lookups/" + hostsLookFile
hostsURLFileLoc = currentDir + "/../default/" + hostsURLFileLoc
hostIP = sys.argv[1]
hostName = sys.argv[2]
hostURL = sys.argv[3]
hostMan = sys.argv[4]
hostModel = sys.argv[5]
hostType = sys.argv[6]
hostDC = sys.argv[7]

#pat = re.compile(^hostIP\s+)

#test = pat.match(hostIP)
#if test:
#   print "Acceptable ip address"
#else:
#   print "Unacceptable ip address"


try:
    socket.inet_aton(hostIP)
except socket.error as e:
    print "Unacceptable ip address", e
else:
    print "Acceptable ip address, proceeding..."
    print "Checking host if " + hostIP + " exists..."
    if not hostIP in open(hostsFileLoc).read():
        print hostIP + " does not yet exist, checking valid required input..."
        if hostName != "*" and hostIP != "*":
            print "...processing..."
            with open(hostsFileLoc,'a+') as hostsFilePython, open(hostsLookFileLoc, 'a+') as hostsLookFileCSV, open(hostsURLFileLoc, 'a+') as 

hostsURLPython:
                print "..host IP adddress for ping testing.."
                hostsFilePython.write(hostIP + "\n")
                print "..and, all values for referencing.."
                hostsLookFileCSV.write(hostIP + "," + hostName + "," + hostURL + "," + hostMan + "," + hostModel + "," + hostType + "," + 

hostDC + "," + "\n")
                if hostURL != "*": 
                    "..adding URL for webping testing.."
                    hostsURLPython.write("[" + hostName + "]\n" + "url = " + hostURL + "\n" + "sleep = 60" + "\n" + "\n")
                    print "done!"

        else:
            print "..failed! - Both host IP address and host name required"
    else:
        print hostIP + " already exists, please review lookups."
#except socket.error as e:
#   print "Unacceptable ip address", e
4

5 に答える 5

2

例外の使用に関する私の最初のコメントを詳しく説明するには、アドレスの有効性に基づいて、Trueまたはに基づいて返す関数を作成します。False

import socket

def check_ip(addr):
    try: 
        socket.inet_aton(addr)
        return True
    except socket.error:
        return False

それから

check_ip('apple')
False

check_ip('74.125.225.98')
True
于 2012-06-30T19:35:09.237 に答える
1

とを使用tryexceptます。

import socket

hostIP=sys.argv[1]

try:
    socket.inet_aton(hostIP)
except socket.error as e:
    print "Error:", e
else:
    # Do something with valid ip address

最初に を実行しようとしますsocket.inet_aton(hostIP)。失敗した場合はエラー メッセージが出力され、成功した場合はelse. 他のコードによって発生した例外をキャッチしないように、他のコードをelseではなく下に配置します。try


アップデート:

import platform
import subprocess
import re
import socket

hostsFile = "hosts.txt"
hostsLookFile = "hosts.csv"
hostsURLFileLoc = "urls.conf"
plat = platform.system()
currentDir = "C:/Program Files/Splunk/etc/apps/gtvm/bin"
hostsFileLoc = currentDir + "/" + hostsFile
hostsLookFileLoc = currentDir + "/../lookups/" + hostsLookFile
hostsURLFileLoc = currentDir + "/../default/" + hostsURLFileLoc
hostIP = sys.argv[1]
hostName = sys.argv[2]
hostURL = sys.argv[3]
hostMan = sys.argv[4]
hostModel = sys.argv[5]
hostType = sys.argv[6]
hostDC = sys.argv[7]

#pat = re.compile("\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}")

#test = pat.match(hostIP)
#if test:
#   print "Acceptable ip address"
#else:
#   print "Unacceptable ip address"


try:
    socket.inet_aton(hostIP)
except socket.error as e:
    print "Unacceptable ip address", e
else:
    print "Acceptable ip address, proceeding..."
    print "Checking host if " + hostIP + " exists..."
    if not hostIP in open(hostsFileLoc).read():
        print hostIP + " does not yet exist, checking valid required input..."
        if hostName != "*" and hostIP != "*":
            print "...processing..."
            with open(hostsFileLoc,'a+') as hostsFilePython, open(hostsLookFileLoc, 'a+') as hostsLookFileCSV, open(hostsURLFileLoc, 'a+') as hostsURLPython:
                print "..host IP adddress for ping testing.."
                hostsFilePython.write(hostIP + "\n")
                print "..and, all values for referencing.."
                hostsLookFileCSV.write(hostIP + "," + hostName + "," + hostURL + "," + hostMan + "," + hostModel + "," + hostType + "," + hostDC + "," + "\n")
                if hostURL != "*": 
                    "..adding URL for webping testing.."
                    hostsURLPython.write("[" + hostName + "]\n" + "url = " + hostURL + "\n" + "sleep = 60" + "\n" + "\n")
                    print "done!"

        else:
            print "..failed! - Both host IP address and host name required"
    else:
        print hostIP + " already exists, please review lookups."
于 2012-06-30T19:25:17.257 に答える
1

ソケット エラーがトラップされるように、次のテンプレートを使用できます。

try:
    your block here
except socket.error:
    print "your message"
于 2012-06-30T19:25:32.667 に答える
1

これ:

not hostIP in open(hostsFileLoc).read()

ファイル全体を単一の文字列として読み取り、hostIPその文字列を検索します。などの部分一致も検索さ"92.168.1.21""192.168.1.2"ます。

于 2012-06-30T19:45:08.977 に答える
0

使用する一部のPythonコードは、例外をスローします。したがって、次のような例外に対応するコードを作成する必要があります。

import socket

hostIP=sys.argv[1]

try:
  socket.inet_aton(hostIP):
  return True
except socket_error:
  return False
于 2012-06-30T21:08:21.030 に答える