You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合executor使用pythonping 树莓派下无需root获取ICMP ping结果

基于executor.Communicator的可运行实现

from executor import Communicator
import json

def get_ping_average(target_ip: str, ping_count: int = 10, packet_size: int = 40) -> float | None:
    # 构造sudo执行的Python命令,内嵌pythonping调用逻辑
    run_cmd = [
        "sudo", "python3", "-c",
        f"""
from pythonping import ping
import json
ping_result = ping('{target_ip}', count={ping_count}, size={packet_size}, timeout=2)
print(json.dumps({{'rtt_avg': ping_result.rtt_avg_ms, 'is_success': ping_result.success(2)}}))
        """
    ]
    # 通过Communicator执行命令
    comm = Communicator(run_cmd, capture=True)
    comm.run()
    if not comm.succeeded:
        return None
    # 解析返回的ping结果
    result_data = json.loads(comm.output.strip())
    return result_data['rtt_avg'] if result_data['is_success'] else None

# 测试调用
if __name__ == "__main__":
    avg_rtt = get_ping_average("1.1.1.1", 10, 40)
    if avg_rtt:
        print(f"10次ping平均响应时间:{avg_rtt} ms")
    else:
        print("ping执行失败,请检查网络或权限配置")

前置配置说明

  • 若要实现pi用户无密码运行,可执行sudo visudo编辑权限配置,在文件末尾添加:
    pi ALL=(ALL) NOPASSWD: /usr/bin/python3
    
    保存后即可无需输入sudo密码直接运行脚本。
  • 无需executor的替代方案:直接给Python解释器授予ICMP所需的raw socket权限,执行命令:
    sudo setcap cap_net_raw+ep /usr/bin/python3
    
    配置完成后可以直接调用pythonping的ping()方法,不需要root权限,也不需要引入executor依赖。

内容的提问来源于stack exchange,提问作者Shawn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:06:03