Python ';无法访问主机';成功回归
我有下面一段Python代码,用于Ping多个地址Python ';无法访问主机';成功回归,python,ping,icmp,Python,Ping,Icmp,我有下面一段Python代码,用于Ping多个地址 import subprocess as s import tkinter as tk from tkinter import * IPT.title("IP Ping Test Tool") canvas_IPT = Canvas(IPT, width=401, height=551) canvas_IPT.pack() Output_IP_Address_AN = Output_IP_Address[10] IPT_Disp
import subprocess as s
import tkinter as tk
from tkinter import *
IPT.title("IP Ping Test Tool")
canvas_IPT = Canvas(IPT, width=401, height=551)
canvas_IPT.pack()
Output_IP_Address_AN = Output_IP_Address[10]
IPT_Display_AN = Label(IPT, text=Output_IP_Address_AN, anchor=W)
IPT_Display_AN_Window = canvas_IPT.create_window(150, 235, anchor = 'sw', window = IPT_Display_AN)
def IPT_Test():
print("Test Initiated")
AN_Sel_State = var4.get()
if (AN_Sel_State == 1):
if(s.call(["ping", Output_IP_Address_AN])==0):
print("AvI Navi 'Ping' Sucessful")
IPT_Display_AN = Label(IPT, text=(Output_IP_Address_AN, "Ok"),fg='green', anchor=W)
IPT_Display_AN_Window = canvas_IPT.create_window(150, 235, anchor = 'sw', window = IPT_Display_AN)
else:
print("Avi Navi 'Ping' NOT Sucessful")
IPT_Display_AN = Label(IPT, text=(Output_IP_Address_AN, "Failed"),fg='red', anchor=W)
IPT_Display_AN_Window = canvas_IPT.create_window(150, 235, anchor = 'sw', window = IPT_Display_AN)
IPT_Display_AN = Label(IPT, text=Output_IP_Address_AN, anchor=W)
IPT_Display_AN_Window = canvas_IPT.create_window(150, 235, anchor = 'sw', window = IPT_Display_AN)
var4 = IntVar()
IPT_Test_AN = Checkbutton(IPT, text = "AVI/NAVI", justify=LEFT,width=15, indicatoron=0,
variable = var4, command=AN_Sel)
IPT_Test_AN_Window = canvas_IPT.create_window(20, 240, anchor = 'sw', window = IPT_Test_AN)
IPTest_Button = tk.Button(IPT, text = 'TEST', command = IPT_Test, background ="#01AEAC", width=20, height=3,)
在接收到数据包数据(成功)的情况下,这与预期一样有效,在“请求超时”(不成功)时也有效,但在“主机不可访问”时,它返回的结果是成功的
对此做了一些研究,我相信“主机不可访问”返回为==0,即使ping实际上没有成功(仍然不理解为什么会这样?)
如果是这种情况,当我的应用程序具有与成功Ping相同的退出状态时,如何排除“主机不可访问”显示成功?我不知道为什么会在您的本地出现这种情况,我在本地测试,当我有以下代码时,它对我有效:
...
if(s.call(["ping", "-c", "1", "-W", "4", Output_IP_Address_AN])==0):
print("AvI Navi 'Ping' Sucessful")
...
我让ping发送1个包,超时时间为4秒
在local中,我运行以下命令来模拟主机不可访问的情况:
sudo ip route add unreachable 1.0.0.3
然后使用上面的更改运行代码,
而不成功的是印刷。当输出IP地址被设置为1.0.0.3时,因为PING请求得到如下回复: 来自xx.xx.xx.xx的回复:无法访问目标主机 从技术上讲,这仍然是一个回答 因此,请尝试解析控制台输出,这可能会达到以下目的:
ping-c1-w4 ip地址| findstr/i“TTL”
这里有一个类似的问题:
读取命令的输出。
ping
首先不能正确编写脚本。您可能应该查看fping
或multiping
或friends。我们可以猜到s
是子流程的别名,但我猜不到其他别名。也许可以看一下创建@tripleee的指南。抱歉,我试图将代码示例保持在最低限度,我将编辑此帖子clarify@tripleeefping看起来很理想,但我使用的是windows而不是linux。此ping的结果用于更广泛程序中的其他功能,否则我将按照您的建议使用专用ping工具。我将使用您拥有的再次测试此功能。“-c”,“1”,“-W”,“4”在做什么?所以在我的测试场景中,我连接到一个设备。当设备配置正确时,我获得成功;当设备配置不正确时,我获得“主机不可访问”(返回成功);如果我拔下设备以太网,我获得“请求超时”,返回不成功