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

如何判断subprocess.call调用ping命令的返回值并输出布尔状态?

问题原因

subprocess.call()的返回值是系统命令的退出状态码,遵循通用的命令行返回规则:

  • 命令执行成功返回0
  • 命令执行失败返回非0数值

ping命令也符合这个规则:能ping通目标时返回0,ping不通时返回非0值(Windows环境下通常为1)。你原来的代码存在两个问题:

  1. 逻辑写反:把0对应到了代表失败的False分支,实际0才代表ping成功
  2. 直接和True/False做全等判断:Python中0 == False、1 == True成立,但如果ping返回其他非0值就会走到else分支

修正实现

只需要修改判断逻辑即可,也可以顺带优化冗余代码:

import subprocess
from openpyxl import load_workbook

def ping_rng():
    wb = load_workbook(filename="IP_gav.xlsx")
    ws = wb["172.16.7.X"]
    
    for IP_ in range(2,258):
        # 直接获取单元格IP,不需要额外维护列表和i变量
        ip_addr = str(ws.cell(row=IP_, column=1).value)
        # 增加-w 1000参数,设置1秒超时,避免单个IP卡太久
        command = ['ping', '-n', '1', '-w', '1000', ip_addr]
        # 增加stdout、stderr参数可以屏蔽ping的默认命令输出,只保留自定义打印内容
        response = subprocess.call(command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
        print(f"测试IP {ip_addr} 退出码:{response}")
        
        # 修正后的判断逻辑
        if response == 0:
            print("Is up.")
        else:
            print("Is down.")

ping_rng()

补充说明

如果你之前测试subprocess.call()全返回0,大概率是测试用的IP全部可以ping通,可以故意填一个不存在的IP(比如172.16.7.999)验证,此时会返回非0值,走到Is down分支。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:15:04