python

Python如何实现ping命令功能

小樊
87
2024-12-07 13:20:42
栏目: 编程语言

在Python中,你可以使用subprocess模块来执行ping命令

import subprocess

def ping(host, timeout=1, count=4):
    """
    执行ping命令,返回一个包含ping结果的列表。
    
    :param host: 要ping的主机名或IP地址
    :param timeout: 每次ping的等待时间(秒)
    :param count: 要发送的ping数据包数量
    :return: 包含ping结果的列表,每个元素是一个字典,包含以下键值对:
             - 'success': 布尔值,表示ping是否成功
             - 'time': 浮点数,表示ping所需的时间(秒)
             - 'error': 字符串,表示ping失败的原因(如果有的话)
    """
    results = []
    for i in range(count):
        try:
            # 在Windows系统中,使用'-n'参数,而在Linux和macOS系统中,使用'-c'参数
            param = '-n' if platform.system().lower() == 'windows' else '-c'
            output = subprocess.check_output(['ping', param, str(count), host], stderr=subprocess.STDOUT, universal_newlines=True)
            
            # 解析ping的输出,提取所需的信息
            success = 'TTL=' in output and 'from' in output
            time = float(output.split('time=')[-1].split(' ')[0]) if success else None
            
            results.append({
                'success': success,
                'time': time,
                'error': None
            })
        except subprocess.CalledProcessError as e:
            # 如果ping失败,提取错误信息
            error = e.output.strip()
            results.append({
                'success': False,
                'time': None,
                'error': error
            })
    
    return results

if __name__ == '__main__':
    host = 'example.com'
    ping_results = ping(host)
    for result in ping_results:
        print(result)

这个示例定义了一个名为ping的函数,它接受一个主机名或IP地址作为参数,并执行ping命令。函数返回一个包含ping结果的列表,每个元素是一个字典,包含ping是否成功、所需时间和错误信息(如果有的话)。

请注意,这个示例仅适用于Windows、Linux和macOS系统。如果你需要支持其他操作系统,你可能需要根据系统调整ping命令的参数。

0
看了该问题的人还看了