Python应用实战--制作网络稳定性监控自动化脚本
文章目录
Python应用实战—制作网络稳定性监控自动化脚本
实战目标:利用python语言编写自动化脚本实时监控当前计算机网络状态并记录状态
实战出发点
在工业自动化应用中当有网络不稳定或延迟时,有可能造成自动化设备的报警或停机故障,但在实际处理故障时往往故障出现呈现随机性导致无法快速定位故障点;本实战目标为在计算机设备中加入自动监控网络状态脚本,实时记录网络状态,当出现设备故障停机时可查看网络监控文本用于辅助检查网络中各设备的通讯状态;
一、技术实现规划
检查网络状态可以使用cmd命令行的Ping命令,但是ping命令虽然可以检查网络状态,但是无法将记录保存,日志不可以追溯
python拥有很多模块可以与操作系统进行交互,并获取操作系统的信息
1、通过python的subprocess模块实现与操作系统的交互
2、通过re模块使用正则表达式从系统反馈的文本中提取关键信息
3、通过自定义的csv格式代码将记录改写为表格形式以在excel中实现信息的筛选
4、在windows系统上创建bat自动化运行文件
5、在windows系统上创建并配置自动运行任务
二、python代码实现
import datetime
import subprocess
import re
import argparse
import sys
# -----1 test network
def check_network(ip_address: str,
file_path: str = r'C:\Users\reedi\Desktop\Python_code\project\network_monitor\network_mon.csv') -> None:
_cmd = f'ping {ip_address} -t'
_match_ip = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
_match_bytes = re.compile(r'\s..=(\d+)\s')
_match_time = re.compile(r'.\d+ms')
_match_ttl = re.compile(r'TTL=(\d+)')
_subprocess = subprocess.Popen(_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, text=True)
try:
while True:
try:
line = _subprocess.stdout.readline()
if not line:
break
else:
_ip_str = _match_ip.search(line)
_bytes_str = _match_bytes.search(line)
_time_str = _match_time.search(line)
_ttl_str = _match_ttl.search(line)
if _ip_str and _bytes_str and _time_str and _ttl_str:
_str_list = map(str, [datetime.datetime.now(), _ip_str.group(), _bytes_str.group(1),
_time_str.group(), _ttl_str.group(1)])
_csv_str = ','.join(_str_list)
print(f'{datetime.datetime.now()}: {line.strip()}')
write_to_file(_csv_str, file_path)
except PermissionError:
print(f'PermissionError: can not write to file {file_path}')
except Exception as e:
print(f'Error: {e}')
finally:
_subprocess.stdout.close()
_subprocess.stderr.close()
_subprocess.wait()
# -----2 write result to file
def write_to_file(content: str, file_name: str = 'check_network_log.csv') -> None:
with open(file_name, 'a', encoding='utf-8') as file:
file.write(f'{content}\n')
if __name__ == '__main__':
if len(sys.argv) > 1:
print(f'run check_network function with command line arguments')
parser = argparse.ArgumentParser(description='Check network connectivity by pinging a specified IP address.')
parser.add_argument('ip_address', type=str, help='The IP address to ping.')
parser.add_argument('file_path', type=str, help='The path to the log file.')
args = parser.parse_args()
check_network(args.ip_address, args.file_path)
else:
print(f'run check_network function with default parameters')
check_network('192.168.0.10', r'C:\Users\reedi\Desktop\Python_code\project\network_monitor\network_mon.csv')
三、创建bat文件
@echo off
start /B python C:\Users\reedi\Desktop\Python_code\project\network_monitor\check_network.py 192.168.0.10 C:\Users\reedi\Desktop\Python_code\project\network_monitor\network_mon.csv
pause
需要根据文件放置的位置重新配置文件地址及更新IP地址
最终文件如下图所示:
四、创建自动运行任务
1、打开windows任务计划程序
win+r 打开运行程序,输入taskschd.msc
2、创建基本任务
3、配置任务
小结
1、自动任务完成后需要触发条件才能运行,如果想直接运行可以在任务计划程序库里直接查看任务状态,并右击运行
2、当创建的python脚本中有异常出现故障未处理时任务会自动停止,需要手动点击重新启动,但需要排除脚本故障否则仍会停止
3、python写入文件代码操作较简单未使用python csv模块,最终文件未生成列名及控制文件占用大小,复杂应用建议使用csv模块进行覆写
4、当自动化脚本运行过程中打开csv文件会导致脚本写入权限占用,需要关闭csv文件后脚本自动继续运行
5、生成的csv文件可以在vs code中打开,但可能显示为文本格式,如需要显示为表格可以安装csv显示插件,也可以在excel中直接打开为表格形式
原文地址:https://blog.csdn.net/PittDing/article/details/144095271
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!