读取含IP与主机名的TXT文件执行Python Ping脚本失败问题
问题原因及解决办法
你代码里的 ip = i[-15:] 是硬截取每行最后15个字符,当每行添加主机名后,这个截取结果要么包含主机名,要么直接就是主机名,根本不是正确的IP地址,自然会导致Ping失败。
正确的处理逻辑是:针对「IP 主机名」的行格式,把每行按空格拆分后取第一个字段作为IP。
修正后的代码示例:
import os import subprocess def iplist(): # 用with语句自动管理文件,避免资源泄漏 with open("iplist.txt", "r") as pingList: for line in pingList: # 先去除换行符,跳过空行 cleaned_line = line.strip("\n") if not cleaned_line: continue # 按空格拆分,取第一个元素作为IP ip = cleaned_line.split()[0] with open(os.devnull, 'w') as DEVNULL: try: subprocess.check_call( ['ping', '-w', '1', ip], stdout=DEVNULL, stderr=DEVNULL ) print(f"{ip} 连通正常") except subprocess.CalledProcessError: print(f"{ip} 连通失败")
额外优化说明:
- 用
with语句打开iplist.txt,无需手动关闭文件,更安全 - 增加空行判断,避免处理空行时触发报错
- 捕获
CalledProcessError,可以直观输出每台主机的Ping状态
内容的提问来源于stack exchange,提问作者chenoi
相关产品推荐
相关产品推荐

