python - 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”变量的值:
- 在任何情况下,使用subprocess.call()的返回值都是“0”(因此在最后一个“if”语句中返回False
) 或 - 使用subprocess.check_output()返回的是“cmd 样式”中的 ping 命令本身(在最后一个“if”语句中返回“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.
推荐阅读
- sql - 给定日期的最大日期 - sql
- linux - 比较两个文件并打印匹配数据
- wordpress - Woocommerce 在购物车后添加钩子不起作用
- firebase - 如何从 firebase 查询返回任何类型的 Observable
- ios - 如何从 Maps Swift 中当前位置的反向地理编码中获取 countryShortName、division、stateShortName、subLocality 等字段
- jquery - BS4 在卡体外点击时关闭手风琴
- java - 在java中通过基于soap的ws发送xml消息
- git - 在 vscode 中从 git 中删除 node_modules
- android - 如何检查gps从哪些卫星接收数据?
- angular - 如何以角度过滤具有多个属性的数组