私はちょうどPythonを学び始めて、次の問題を抱えています。 私は、テキストファイルからIPアドレスを読み込み、ICMP到達可能性をチェックする簡単なプログラムを持っています。テキストファイルに1つのIPアドレスがある場合、プログラムに問題はありませんが、テキストファイルに2つ以上のIPアドレスを追加するとすぐにプログラムが機能しません。それは1つ以上のアドレスのように見える、窓pingユーティリティはIPアドレスを理解することさえできず、名前を解決しようとする。Pythonのテキストファイルから複数のIPアドレスを読み取る/発行する問題
サンプルコードファイルを読み込み、ICMPをチェックする:
def validate_ip():
global ip_add_list
check = False
while True:
try:
ip_file = raw_input("Enter the file name and extension:")
selected_ip_file = open(ip_file,'r')
selected_ip_file.seek(0)
ip_add_list = selected_ip_file.readlines()
selected_ip_file.close()
#print ip_add_list
except IOError:
print"*File %s doesn't exist, try again" % ip_file
continue
check2 = False
while True:
for ip in ip_add_list:
print ip
ping_reply = subprocess.call(['ping','-n','5','-w','1000','-a',ip])
if ping_reply == 0:
check2 = True
print "pings completed"
else:
check2 = False
break
if check2 == True:
break
elif check2 == False:
print"Some or all ip(s) in the file are not reachable, please check and try again"
validate_ip()
私は、次のアドレスを持つ単純なテキストファイルを持っています。
4.2.2.2
8.8.8.8
私は、コマンドプロンプトから、しかしないプログラムからこれらのアドレスに対してpingを実行することができます。
これは、プログラムからpingを実行中に発生するエラーです。
Ping要求でホスト4.2.2.2 が見つかりませんでした。名前を確認してもう一度お試しください。 一部またはすべてのIP(S)ファイルには、チェックして、もう一度
を試してみてください、到達できないとすぐに私は削除
を(4.2.2.2がすでにIPであること、それは理解していないように見えます)テキストファイルから2番目のアドレスを指定して再度実行すると、4.2.2.2にpingすることができます。
各IPアドレスに改行が付加されていることがあります。 'subprocess.call'で' ip.rstrip() 'を試してください。 – cdarke
@cdarkeうわー!魅力的に働いた。これは私を夢中にさせていた。ヘルプcdarkeを高く評価しました。助けを贈る方法はありますか? –
私は助けてうれしいです、あなたの感謝は十分です。この種の問題は、ファイルから読み込んだテキストを使用する場合によく起こるので、IPアドレスではなくファイル名で前に見ました。ヒント:あなたは 'print ip'というトレース文を持っています。すると、' print 'のようなものを使ってください。<'+ip+'>' 'シェブロンは、周囲に空白があるかどうかを示します。エラーメッセージの中に変数を埋め込むときも同じです。 – cdarke