[英]Issue with reading/pinging multiple ip address from text file in python
我剛開始學習 Python 並遇到以下問題。 我有一個簡單的程序可以從文本文件中讀取 IP 地址並檢查 ICMP 的可達性。 當文本文件中只有一個 IP 地址時,我的程序沒有問題,但是,一旦我在文本文件中添加了 1 個以上的 IP 地址,我的程序就無法運行。 看起來有 1 個以上的地址,windows ping 實用程序甚至無法理解 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 無法訪問,請檢查並重試
(貌似看不懂4.2.2.2已經是IP了)
一旦我從文本文件中刪除第二個地址並再次運行,我就可以 ping 到 4.2.2.2。
由於文件中有空格,程序中未識別出 IP 地址有效。 感謝 cdarke 提供以下解決方案。
“您可能在每個 IP 地址后附加了一個換行符。在 subprocess.call 中嘗試 ip.rstrip()”
roadrunner66,我也很感謝您對此問題的幫助並提供解決方案。
注意:此問題可能與ping-a-site-in-python重復。
為了使代碼可讀,將其轉換為如下所示的塊。 歸功於python-read-file-line-by-line-into-array 。 SO 問題ping-a-site-in-python也討論了 ping 的替代方法。
import subprocess
def validate_ips_from_file(filename):
lines = [line.rstrip('\n') for line in open('filename')]
validate_ips(lines)
def validate_ips(ipaddresses):
for ip in ipaddresses:
ping_reply=validate_ip(ip)
print ip, ping_reply
def validate_ip(ipaddress):
ping_reply = subprocess.call(['ping','-c','5','-w','1000','-a',ipaddress])
#https://en.wikipedia.org/wiki/Ping_(networking_utility)
return ping_reply
validate_ips(['www.nytimes.com','www.theregister.co.uk','www.stackoverflow.com'])
輸出:
www.nytimes.com 1
www.theregister.co.uk 1
www.stackoverflow.com 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.