【发布时间】:2021-06-13 09:33:25
【问题描述】:
我正在尝试编写一个函数来 ping 与 LAN 连接的多个 IP 地址到我的 PC
我是:
'''
def ping_ip (ip):
pingResponse = os.system("ping " + ip + " -n 1")
if pingResponse == 0:
return "Pass"
else:
return "Fail"
def ping_all_ips ():
global allIPs
for ip in allIPs:
result = ping_ip(ip)
print(f"Attempt To Ping {ip} -----> {result}")
'''
但问题是即使 IP 未连接我也会得到“通过”,因为它会将“来自 XXXX 的回复:无法访问目标网络”视为成功
编辑:尝试使用 subprocess 模块如下:
def ping_ip (ip):
process = subprocess.Popen("ping " + ip + " -n 1" , shell=True stdoutt=subprocess.PIPE)
for line in process.stdout:
if b"Destination" in line or b"Request timed out" in line:
return "Fail"
else:
return "Pass"
def ping_all_ips ():
global allIPs
for ip in allIPs:
result = ping_ip(ip)
print(f"Attempt To Ping {ip} -----> {result}")
if __name__ == '__main__':
ping_all_ips()
【问题讨论】:
-
您可以使用模块
subprocess.Popen()而不是os.system()并捕获当前发送到终端的输出,然后检查它。