在 Python 中,有没有办法通过 ICMP ping 服务器并在服务器响应时返回 TRUE,或者在没有响应时返回 FALSE?
原文由 Kudu 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Python 中,有没有办法通过 ICMP ping 服务器并在服务器响应时返回 TRUE,或者在没有响应时返回 FALSE?
原文由 Kudu 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您不需要支持 Windows,这里有一个非常简洁的方法:
import os
hostname = "google.com" #example
response = os.system("ping -c 1 " + hostname)
#and then check the response...
if response == 0:
print hostname, 'is up!'
else:
print hostname, 'is down!'
这是有效的,因为如果连接失败,ping 将返回一个非零值。 (返回值实际上因网络错误而异。)您还可以使用“-t”选项更改 ping 超时(以秒为单位)。请注意,这会将文本输出到控制台。
原文由 Scott 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
此功能适用于任何操作系统(Unix、Linux、macOS 和 Windows)
Python 2 和 Python 3
编辑:
由 @radato
os.system
替换为subprocess.call
。这可以避免在您的主机名字符串可能未被验证的情况下出现 shell 注入 漏洞。请注意,根据 Windows 上的 @ikrase,此函数仍会返回
True
如果出现Destination Host Unreachable
错误。解释
该命令在 Windows 和类 Unix 系统中都是
ping
。选项
-n
(Windows) 或-c
(Unix) 控制本例中设置为 1 的数据包数量。platform.system()
返回平台名称。前任。'Darwin'
在 macOS 上。subprocess.call()
执行系统调用。前任。subprocess.call(['ls','-l'])
。