Python:用pythonping处理ping

简介:ping (Packet Internet Groper)是一种因特网包探索器,用于测试网络连接量的程序 。Ping是工作在 TCP/IP网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议)Echo 请求报文,测试目的站是否可达及了解其有关状态。ping用于确定本地主机是否能与另一台主机成功交换(发送与接收)数据包,再根据返回的信息,就可以推断TCP/IP参数是否设置正确,以及运行是否正常、网络是否通畅等。

历史攻略:

Python:subprocess模块

Ping命令可以进行以下操作:

1、通过将ICMP(Internet控制消息协议)回显数据包发送到计算机并侦听回显回复数据包来验证与一台或多台远程计算机的连接。

2、每个发送的数据包最多等待一秒。

3、打印已传输和接收的数据包数。

需要注意的是,Ping成功并不一定就代表TCP/IP配置正确,有可能还要执行大量的本地主机与远程主机的数据包交换,才能确信TCP/IP配置的正确性。如果执行ping成功而网络仍无法使用,那么问题很可能出在网络系统的软件配置方面,ping成功只保证当前主机与目的主机间存在一条连通的物理路径。

安装:

pip install pythonping

案例源码1:os模块的下ping的方式,易造成执行堵塞,并且提取比较繁琐。

# -*- coding: utf-8 -*-
# time: 2022/7/31 11:26
# file: main.py
# 公众号: 玩转测试开发
import os
cmd = "ping www.baidu.com"
message = os.system(cmd)
print("*" * 100)
print(message)

案例源码2:pythonping模块处理ping,无堵塞现象,并且易于提取。

# -*- coding: utf-8 -*-
# time: 2022/11/18 11:26
# file: ping-demo.py
# 公众号: 玩转测试开发
from pythonping import ping
from colorama import Fore, Back, Style


def check_online(ip: str):
    message = ping(ip)
    print(message)
    success_ping = "Reply"
    if success_ping in str(message):
        print(Fore.GREEN + Style.BRIGHT + f"localhost to - {ip} Success.")
    else:
        print(Fore.RED + Style.BRIGHT + f"localhost to - {ip} Fail.")


if __name__ == '__main__':
    check_online("14.215.177.39")
    print(Style.RESET_ALL)
    check_online("111.112.113.114")

执行2结果:

图片

即:通过pythonping的结果有2个,通: 回复字节 Reply bytes,不通:请求超时 Request timed out,来快速判断ping的结果,从而快速得到结果。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误通常是由于在使用 Boost.Python 时出现了异常,但是没有正确处理导致的。这种情况下,Boost.Python 会将异常转换为 `boost::python::error_already_set` 异常抛出。 要解决这个问题,可以尝试以下步骤: 1. 确保 Python 环境正确初始化。在使用 Boost.Python 之前,必须通过 `Py_Initialize()` 函数初始化 Python 环境。在程序结束时,应调用 `Py_Finalize()` 函数清理 Python 环境。 2. 确认 Python 代码没有语法错误。如果 Python 代码中存在语法错误,将会导致异常抛出。可以在 Python 中使用 `python -m py_compile example.py` 命令检查代码是否存在语法错误。 3. 在调用 Python 函数时,要使用 `try...except...` 语句捕获异常。例如: ``` try { int result = py::extract<int>(add_func(1, 2)); } catch (const boost::python::error_already_set& e) { PyErr_Print(); } ``` 在上面的例子中,如果 `add_func` 函数调用抛出了异常,将会捕获 `boost::python::error_already_set` 异常并使用 `PyErr_Print()` 函数打印异常信息。 4. 尝试使用 GIL。Python 的 GIL(全局解释器锁)是一种多线程机制,用于保护 Python 对象免受并发访问的影响。如果在多线程环境中使用 Boost.Python,需要使用 GIL 来保护 Python 对象。可以使用 `py::gil_scoped_acquire` 和 `py::gil_scoped_release` 类来获取和释放 GIL。例如: ``` py::gil_scoped_acquire acquire; // 调用 Python 函数 py::gil_scoped_release release; ``` 在上面的例子中,使用 `acquire` 对象获取 GIL,然后调用 Python 函数,最后使用 `release` 对象释放 GIL。 通过以上步骤,可以尝试解决 `boost::python::error_already_set` 异常。如果问题仍然存在,可以尝试查看异常信息并进行进一步排查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值