Ping 命令 - 检查返回值

Ping command - Check returned value

我如何通过在最后一个“if”语句中使用 True 或 False 值来评估 ping 上使用的 return 命令?
这是代码:

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 文件中获取)并像这样对单个 IP 地址执行 ping 操作,代码正常工作:

ping 172.16.7.0 -n 1

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

如果 运行 成功,

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.