溫馨提示×

Python如何實現ping命令功能

小樊
160
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
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女