如何评估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">
或
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.