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

Python subprocess执行ping命令正常响应但始终返回False问题

问题原因

你始终得到False返回值的核心原因是函数返回逻辑错误,和ping命令本身、系统环境无关:

  • 从你贴的运行输出可以确认,脚本调用的ping命令已经正常执行,2个探测包全部收到、0丢包,网络连通性没有问题
  • 你的myping函数没有基于ping命令的执行结果做正确的返回判断:subprocess.run()返回的是CompletedProcess对象,直接判断这个对象本身、或者判断它的stdout属性(尤其是你配置了stdout=subprocess.DEVNULL时,stdout属性值为None,布尔判断结果为False),都不能得到正确的连通性结果
  • Linux系统中ping命令的执行结果通过进程退出码标识:探测成功(无丢包)时退出码为0,探测失败(不通、丢包)时退出码为非0值,你没有读取这个退出码做判断。
修复方案

修改函数逻辑,显式读取ping命令的退出码做判断,修复后代码如下:

import subprocess

def myping(host):
    print(f"pinging {host}")
    response = subprocess.run(
        ["ping", "-c", "2", host],
        stdout=subprocess.DEVNULL,
        stderr=subprocess.STDOUT
    )
    # 退出码为0代表ping通,返回True;否则返回False
    return response.returncode == 0

print(myping("10.21.30.2"))

可选优化

如果需要避免异常场景下ping命令长时间挂住,可以增加超时参数:

# -w 3 代表整个ping操作总超时时间为3秒
response = subprocess.run(
    ["ping", "-c", "2", "-w", "3", host],
    stdout=subprocess.DEVNULL,
    stderr=subprocess.STDOUT
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:45:41