我刚刚开始学习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 时遇到的错误。
Ping 请求找不到主机 4.2.2.2 。请检查名称并重试。 文件中的部分或全部 IP 无法访问,请检查并重试
(看起来它不明白4.2.2.2已经是一个IP)
一旦我从文本文件中删除第二个地址并再次运行,我就能够 ping 到 4.2.2.2。
最佳答案
由于文件中存在空格,程序中未识别出有效的 IP 地址。感谢cdarke提供以下解决方案。
“您可能会在每个 IP 地址后附加一个换行符。在 subprocess.call 中尝试 ip.rstrip()”
roadrunner66,我也感谢您针对此问题提供的帮助并提供解决方案。
关于python - 从 python 中的文本文件读取/ping 多个 IP 地址时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36678957/