Python执行ping操作的简单方法
作者:田辛?|?田豆芽 发布时间:2022-09-22 12:09:22
1 基本信息
- 模块主页:[github]
- 类型:#第三方库
2 安装方法
pip install pythonping
3 一般使用
from pythonping import ping
@timer
def case1():
return (ping('www.baidu.com', verbose=True))
@timer
def case2():
return ping('www.baidu.com', verbose=False)
verbose=True:意味着输出平的执行过程,测试Case1:
--------------------------------------------------------------------------------
[case1] start at 2023-02-12 07:45:48.366523
Reply from 110.242.68.4, 29 bytes in 11.75ms
Reply from 110.242.68.4, 29 bytes in 11.33ms
Reply from 110.242.68.4, 29 bytes in 11.32ms
Reply from 110.242.68.4, 29 bytes in 11.33ms
函数[case1]执行时间为:0.05608487129211426
函数[case1]执行结果为:
Reply from 110.242.68.4, 29 bytes in 11.75ms
Reply from 110.242.68.4, 29 bytes in 11.33ms
Reply from 110.242.68.4, 29 bytes in 11.32ms
Reply from 110.242.68.4, 29 bytes in 11.33msRound Trip Times min/avg/max is 11.32/11.43/11.75 ms
[case1] end at 2023-02-12 07:45:48.422608
--------------------------------------------------------------------------------
verbose=False:意味着不输出执行过程,测试Case2:
--------------------------------------------------------------------------------
[case2] start at 2023-02-12 07:45:48.422608
函数[case2]执行时间为:0.04709315299987793
函数[case2]执行结果为:
Reply from 110.242.68.4, 29 bytes in 11.41ms
Reply from 110.242.68.4, 29 bytes in 11.56ms
Reply from 110.242.68.4, 29 bytes in 12.15ms
Reply from 110.242.68.4, 29 bytes in 11.75msRound Trip Times min/avg/max is 11.41/11.72/12.15 ms
[case2] end at 2023-02-12 07:45:48.470690
--------------------------------------------------------------------------------
可以看出,case1有执行过程,但是case2没有。
4 ping的返回值
ping的返回值是一个ResponseList对象,既然叫做List那么肯定是可以枚举的。 我们来测试一下:
@timer
def case3():
print("STEP 1: ping www.baidu.com")
ping_rst = ping('www.baidu.com', verbose=False)
print("ping返回值的数据类型是:%s" % type(ping_rst))
print("STEP 2: 遍历ResponseList对象的所有属性")
for ping_item in ping_rst.__dict__:
print("[%s]:%s" % (ping_item, ping_rst.__dict__[ping_item]))
print("STEP 3: 遍历Response对象的所有属性")
cnt = 1
for response_item in ping_rst:
print("STEP 3-%s. Resoonse对象" % cnt)
cnt += 1
for item in response_item.__dict__:
print("[%s]:%s" % (item, response_item.__dict__[item]))
4.1 返回值类型以及常用属性
在例程3中, 第一步是执行ping函数,并且取得他的返回值。
第一步的返回结果是:
STEP 1: ping www.baidu.com
ping返回值的数据类型是:<class 'pythonping.executor.ResponseList'>
以上表明, 返回的是pythonping内部定义的一个对象。 既然如此,我们接下来看看一下这个对象的属性,执行结果如下:
STEP 2: 遍历ResponseList对象的所有属性
[_responses]:[Reply from 110.242.68.4, 29 bytes in 11.68ms, Reply from 110.242.68.4, 29 bytes in 11.39ms, Reply from 110.242.68.4, 29 bytes in 11.51ms, Reply from 110.242.68.4, 29 bytes in 11.82ms]
[stats_packets_sent]:4
[stats_packets_returned]:4
[verbose]:False
[output]:<_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>
[rtt_avg]:0.01159732499945676
[rtt_min]:0.011385000019799918
[rtt_max]:0.011815299978479743
在这次遍历中,有一个内部属性_responses实际上就是4此ping请求的信息。 这里我们日常使用比较多的。就是三个rtt开头的值,只是用方法直接作为属性读取即可。
关于RTT这个缩写,我读了pythonping的源码,并灭有给出详细的解释。 于是我请教了ChatGPT,它的回答是:
RTT代表往返时间(Round Trip Time),即数据包从源传输到目的地再返回所需的时间。RTT通常用于测量网络延迟和网络连接质量。在网络通信的上下文中,RTT是指从发送请求到接收相应响应之间经过的时间。
4.2 ResponseList中的每个Response对象的属性
这部分内容在STEP 3中, 我遍历了所有的属性:
STEP 3-1. Resoonse对象
[message]:45 00 00 1d c1 52 00 00 35 01 1e 03 6e f2 44 04 c0 a8 32 ec 00 00 46 f9 7f 06 01 00 39
[time_elapsed]:0.01167790000909008
[source_request]:08 00 3e f9 7f 06 01 00 39
[repr_format]:legacy
STEP 3-2. Resoonse对象
......
这里面有4个属性:
message: 发送的内容
time_elapsed: 时间
source_request:接收的信息
repr_format: 如何将返回值变为文字列。 有两个可能的属性legacy以及None
4.3 pythonping.ping() 方法的常用形参包括:
hostname: 目标主机的域名或 IP 地址
size: 发送的数据的大小,以字节为单位。默认为 56 字节
count: 要发送的请求的数量。默认为 4 次
timeout: 超时时间,以秒为单位。默认为 1s
verbose: 布尔值,用于指示是否显示详细的输出。默认为 False
来源:https://blog.csdn.net/u013589130/article/details/128992411


猜你喜欢
- 这个微信版网页版虽然繁琐,但是不是很难,全程不带加密的。有兴趣的可以试着玩一玩,如果有兴趣的话,可以完善一下,做一些比较有意思的东西。开发环
- 通用视图1. 前言回想一下,在Django中view层起到的作用是相当于controller的角色,在view中实施的动作,一般是取得请求参
- 代码如下:<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"
- 目录背景什么是协程?什么是 gevent?协程的例子Q&AQ:gevent 无法捕获的耗时A:猴子补丁实践异步 requests 请
- 比较简单的一个页面,类似csdn论坛在ns下的左边列表 描述: 1. 数据名:tree.mdb 表名:tree 表结构:id(自编)&nbs
- 1、背景我们先谈谈为什么在Python编码过程中强烈推荐使用类型注解 ?Python对于初学者来说是非常好上手,原因是在于对计算机底层原理的
- downsample 在最新版本里面修改了位置from theano.tensor.single import downsample (旧版
- 1 K-means算法实际上,无论是从算法思想,还是具体实现上,K-means算法是一种很简单的算法。它属于无监督分类,通过按照一定的方式度
- Python 私有函数的实例详解与大多数语言一样,Python 也有私有的概念:• 私有函数不可以从它们的模块外面被调用• 私有类方法不能够
- 在当前目录下:方法1:file = open(‘filename') a =file.read() b =a.split(‘\n
- 以下实验是我在百度公司实习的时候做的,记录下来留个小经验。多GPU训练cifar10_97.23 使用 run.sh 文件开始训练cifar
- 常用的转换函数是 cast 和 convert,用于把表达式得出的值的类型转换成另一个数据类型,如果转换失败,该函数抛出错误,导致整个事务回
- question: Django中对数据库的调用非常的隐蔽,在各种复杂的模块互相拼接继承中很难发现获取数据库内容的部分来,开始试图理解一下下
- 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456from fun
- 海量数据库的查询优化及分页算法方案 原出处不详 摘自:www.21php.com 随着“ * ”建设的逐步深入和 * 信息化的高
- 先看map()函数底层封装介绍:注释中翻译为:map(func, *iterables)——> map对象创建一个迭代器,使用来自的参
- 以前我也写过一个注册表类,不过那一个不能进行多个类的注册,下面用数组对类进行了存储。 <?php //基础类 class webSit
- 本文实例讲述了Python类装饰器。分享给大家供大家参考,具体如下:编写类装饰器类装饰器类似于函数装饰器的概念,但它应用于类,它们可以用于管
- <!--模板--> <table width="100%" borde
- 爬虫思路初步尝试我先查看了network,并没有发现有可用的API;然后又用bs4去分析英雄列表页,但是请求到html里面,并没有英雄列表,