Ping命令-检查返回值



如何评估subprocess.call()上使用的ping命令的返回,通过在最后的"if"中具有True或False的值声明吗?下面是代码:

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()的不同帖子是True或False,但这对我不起作用,因为它以cmd样式返回ping命令的字符串,这就是为什么我选择了subprocess.call(),它返回命令的状态。
测试:
在上面的代码中,我打印了"response">

与<<ul>
  • strong> subprocess.call () 在任何情况下返回都是'0'(因此returnFalse)在最后的"如果"中声明中)
  • 与<<li> strong> subprocess.check_output () 返回的是ping命令本身"cmd样式"(return"Nothing Good">在最后的"如果"中语句)

    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.