我剛開始學習Python,並遇到以下問題。 我有一個簡單的程序從文本文件讀取IP地址,並檢查ICMP可達性。當文本文件中只有一個IP地址時,我沒有問題,但是,只要我在文本文件中添加了多個IP地址,我的程序就無法工作。它看起來像多於1個地址,windows ping實用程序甚至無法理解IP地址並嘗試解析名稱。從Python中的文本文件讀取/ 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(S)的文件中都沒有到達,請再試一次
(貌似不明白,4.2.2.2已經是一個IP)
一旦我刪除第二個地址從文本文件中再次運行,我可以ping到4.2.2.2。
您可能會爲每個IP地址附加一個換行符。在'subprocess.call'中試試'ip.rstrip()'。 – cdarke
@cdarke哇!像魅力一樣工作。這讓我瘋狂。讚賞幫助cdarke。有沒有辦法提供讚美以獲得幫助? –
我很樂意提供幫助,您的感謝就夠了。使用從文件中讀取文本時,這種問題很常見,所以我以前使用文件名而不是IP地址來看過它。小竅門:你有一個'print ip' trace語句,當你這樣做時,然後使用'print'<'+ip+'>''。 V形圖顯示周圍是否有空白。將變量嵌入錯誤消息中時也是如此。 – cdarke