首页 > 解决方案 > Ping 命令 - 检查返回值

问题描述

如何通过在最后一个“if”语句中使用 True 或 False 的值来评估ping使用的命令的返回? 这是代码:subprocess.call()

import subprocess
from openpyxl import load_workbook
from openpyxl import worksheet
_list_test = []

def ping_rng():
    wb = load_workbook(filename="IP_gav.xlsx")
    ws = wb["172.16.7.X"]
    i = 0

    for IP_ in range(2,258):

        # Get correct cell value
        cell_ = ws.cell(row=IP_, column=1).value
        _list_test.append(cell_)

        # Construct and execute "ping" command
        cmd_param = "-n"
        command = ['ping', cmd_param, '1', str(_list_test[i])]
        response = subprocess.call(command)

        print(response)   # Just to check the value
        
        # Check the "response"
        if response == True:
            print("Is up.")
        elif response == False:
            print("Is down.")
        else: print("Nothing Good")

        i = i + 1

ping_rng()

通过迭代一系列 IP 地址(从 XLSX 文件中获取)并像这样 ping 单个 IP 地址,代码可以正常工作:

ping 172.16.7.0 -n 1

作为进一步的尝试,我发现了关于验证subprocess.check_output()是真还是假的不同帖子,但这对我不起作用,因为它以“cmd 样式”返回 ping 命令字符串,这就是为什么我选择了返回命令状态的 subprocess.call()。
测试:
在上面的代码中,我使用两种不同的方法打印了“response”变量的值:

标签: pythonsubprocess

解决方案


ping如果运行成功,将以 0 作为退出代码退出。鉴于您似乎想以通用方式处理错误代码,您可以保持简单:

import subprocess

def ping_test(ip):
    cmd = ["ping","-n","1",ip]
    response = subprocess.call(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
    if response == 0:
        print(f"{ip} ping was successful!")
        return
    print(f"{ip} ping was not successful.")

ping_test("127.0.0.1")
ping_test("300.0.0.0")

印刷:

#127.0.0.1 ping was successful!
#300.0.0.0 ping was not successful.

推荐阅读