Ping 退出代码和 python

Ping 退出代码和 python

我正在使用 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 pingLinux(系统管理员手册:iputils)

    如果 如果根本没有收到任何回复数据包,它将以代码 1 退出。如果同时指定了数据包计数和截止时间,并且到截止时间到达时收到的数据包少于计数个数,它也将以代码 1 退出。如果出现其他错误,它将以代码 2 退出。否则它将以代码 0 退出。这使得可以使用退出代码来查看主机是否还活着。

    在这种情况下,您可以直接使用退出代码。

相关内容