【Python】执行 ping 操作的简单方法

文章介绍了pythonping模块,这是一个用于执行ping操作的Python库。详细说明了安装方法、基本使用,以及如何通过verbose参数控制输出。还展示了ping函数返回的ResponseList对象,包含RTT信息和Response对象的属性。此外,提到了ping方法的参数如hostname、size、count和timeout。
摘要由CSDN通过智能技术生成

pythonping:Python 中执行 ping 操作的简单方法

1 基本信息

- 模块主页:[github](https://github.com/alessandromaggio/pythonping)
- 类型:#第三方库

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.33ms

Round 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.75ms

Round 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个属性:

  1. message: 发送的内容
  2. time_elapsed: 时间
  3. source_request:接收的信息
  4. repr_format: 如何将返回值变为文字列。 有两个可能的属性legacy以及None

4.3 pythonping.ping() 方法的常用形参包括:

  • hostname: 目标主机的域名或 IP 地址
  • size: 发送的数据的大小,以字节为单位。默认为 56 字节
  • count: 要发送的请求的数量。默认为 4 次
  • timeout: 超时时间,以秒为单位。默认为 1s
  • verbose: 布尔值,用于指示是否显示详细的输出。默认为 False
Python中,打开程序并执行操作通常涉及到使用标准库中的`subprocess`模块。这个模块允许你启动新的应用程序或进程,并与它们的输入/输出/错误管道进行交互。以下是一个简单的例子,展示了如何使用`subprocess`模块打开一个系统程序并执行一些基本操作: ```python import subprocess # 打开系统默认的网页浏览器 subprocess.run(['open', 'https://www.example.com']) # 在macOS上使用open命令 # subprocess.run(['start', 'https://www.example.com']) # 在Windows上使用start命令 # 执行一个命令行程序 subprocess.run(['ping', 'www.example.com']) # 如果需要执行的程序路径不在系统的PATH环境变量中,可以使用完整路径 # subprocess.run(['C:\\Path\\To\\Application.exe']) # 如果需要等待程序执行完成并获取返回码 result = subprocess.run(['python', 'script.py'], capture_output=True, text=True) print('程序返回码:', result.returncode) print('程序输出:', result.stdout) ``` 在上述代码中: - `subprocess.run()` 函数用于启动子进程并等待它结束,然后获取返回码。 - 第一个参数是一个列表,其中第一个元素是要执行的程序的名称(或路径),后续元素是传递给程序的参数。 - 可选参数`capture_output=True`允许你捕获输出和错误输出;`text=True`表示以文本形式获取输出,默认情况下输出是字节类型。 需要注意的是,不同操作系统的命令可能会有所不同,例如在macOS上打开网页可以使用`open`命令,在Windows上则使用`start`命令。在使用时请根据你的操作系统选择正确的命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田辛 | 田豆芽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值