我正在使用 os.system ("ping 192.168.178.5") 命令 ping 一台机器。有趣的是,即使 ping 失败,我也会得到退出代码 0。
我怎样才能得到 ping 失败/主机离线的信息?
答案1
我不是 Python 用户,但可以找到很多有关此问题的资料。
例如,该帖子使用 Python 进行本地网络 ping包含我在这里重现的两个解决方案(未经测试)。
解决方案 1:解析 ping 命令的输出
import subprocess
hostname = "10.20.16.30"
output = subprocess.Popen(["ping.exe",hostname],stdout = subprocess.PIPE).communicate()[0]
print(output)
if ('unreachable' in output):
print("Offline")
还可以通过这种方式测试“请求超时”。
解决方案 2:使用套接字(改编自原始代码,因此不保证)
s = socket(AF_INET, SOCK_STREAM) # Creates socket
host = 'localhost' # Enter the IP of the workstation here
port = 80 # Select port which should be pinged
try:
s.connect((host, port)) # tries to connect to the host
except ConnectionRefusedError: # if failed to connect
print("Server offline") # server is offline
s.close() # close socket
答案2
使用os.system ("ping 192.168.178.5")
命令 ping 一台机器取决于您所使用的系统。
来自网上Windows 下 Ping 帮助:
成功的 PING 并不总是返回 %errorlevel% 0 因此,为了可靠地检测 ping 是否成功 - 将输出导入 FIND 并查找文本“TTL”
因此,您似乎应该使用
ping 192.168.178.5
类似ping -n 1 192.168.178.5 | find "TTL="
从
man ping
Linux(系统管理员手册:iputils)如果 平 如果根本没有收到任何回复数据包,它将以代码 1 退出。如果同时指定了数据包计数和截止时间,并且到截止时间到达时收到的数据包少于计数个数,它也将以代码 1 退出。如果出现其他错误,它将以代码 2 退出。否则它将以代码 0 退出。这使得可以使用退出代码来查看主机是否还活着。
在这种情况下,您可以直接使用退出代码。