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”变量的值:
- 使用 subprocess.call() 时 return 在任何情况下都是“0”(所以 return False 在最后一个“if”语句中)
或
- 使用 subprocess.check_output() return 是“cmd 样式”中的 ping 命令本身 (return “没什么好” 在最后一个“if”语句中)
如果 运行 成功,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.
我如何通过在最后一个“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”变量的值:
- 使用 subprocess.call() 时 return 在任何情况下都是“0”(所以 return False 在最后一个“if”语句中)
或 - 使用 subprocess.check_output() return 是“cmd 样式”中的 ping 命令本身 (return “没什么好” 在最后一个“if”语句中)
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.