ping3 的帮助,设置 timeout=20 参数:
from ping3 import ping
otvet = ping('10.200.231.203', timeout=20, ttl=20)
print(otvet)
如果有响应到达Response from 10.8.8.150: The specified host is not available,那么 response 的值立即变为 False。
Ответ от 10.200.231.203: число байт=32 время=94мс TTL=62
Ответ от 10.200.231.203: число байт=32 время=86мс TTL=62
Ответ от 10.200.231.203: число байт=32 время=82мс TTL=62
Ответ от 10.200.231.203: число байт=32 время=103мс TTL=62
Ответ от 10.200.231.203: число байт=32 время=87мс TTL=62
Превышен интервал ожидания для запроса.
Ответ от 10.8.8.150: Заданный узел недоступен.
Превышен интервал ожидания для запроса.
Ответ от 10.8.8.150: Заданный узел недоступен.
Превышен интервал ожидания для запроса.
怎么办,如果没有得到一个完整的答案,那么他无论如何都试图在 20 秒内联系到他?
我想使用异常循环的现有循环:
def ping_complexes(row_size):
try:
records = Mangustes.query.limit(row_size).all()
for record in records:
if ping(record.ip, timeout=20, ttl=3) in (None, False):
print('Offline: '+record.ip)
record.Status = 'Offline'
else:
print('Online: ', record.ip)
record.Status = 'Online'
db.session.commit()
except Exception as e:
print("???", e)
额外的尝试 功能:
def ping_complexes(row_size):
try:
records = Mangustes.query.limit(row_size).all()
for record in records:
if pinger in (None, False):
print('Offline: '+record.ip)
record.Status = 'Offline'
else:
print('Online: ', record.ip)
record.Status = 'Online'
db.session.commit()
except Exception as e:
print("???", e)
def pinger():
while (datetime.datetime.now() - start).total_seconds() < timeout:
otvet = ping(record.ip, timeout=timeout)
if otvet:
break
return(otvet)
我给了你一个解决方案:
这段代码做你想做的事。虽然对我来说没有多大意义。事实上,参数
timeout
yping
设置了等待请求响应的最长时间。. 关键是,如果某个地方的信号徘徊了很长时间,以免无限期地等待它。如果出现明显错误 - 例如,设置了不正确的 ping 地址或网络配置存在问题,则无需等待 ping - 答案已经立即出现,我们有某种错误网络,超时的概念在这里不适用。因此,在这种情况下,您只能组织一个外部循环来等待肯定响应或为请求分配的时间结束。这就是我在这段代码中所做的。如果网络在一段时间后有时会下降和上升,并且您不想在 ping 结果中看到此事件,而只想等待这一刻,那么此代码可以帮助您。在其他情况下,在我看来,如果出现明显的网络错误,等待某些东西是没有意义的。更新: 如果你只是有个别 ping 掉线并且想跳过错误(但不超过几次),那么你可以只做一定次数的尝试而不考虑代码运行时间,这会更容易:
一般来说,标准 ping 允许您设置尝试次数,这在这里很有用,但在这个特定的库中似乎没有这种可能性,我没有找到这样的参数。