首页 > 其他分享 >开发一个软件自动运行工具不可缺少的源代码分享!

开发一个软件自动运行工具不可缺少的源代码分享!

时间:2024-06-20 18:02:06浏览次数:14  
标签:源代码 logging log script 软件 日志 分享 message 运行

在软件开发领域,自动运行工具扮演着至关重要的角色,它们能够简化软件部署、提升运行效率,并在很大程度上降低人为操作失误的可能性。

而一个高效的自动运行工具的背后,往往是经过精心设计与实现的源代码在默默支撑,本文将分享五段关键的源代码,这些代码是开发一个软件自动运行工具时不可或缺的组成部分。

第一段:主程序入口与参数解析

自动运行工具的首要任务是接收并执行用户指定的命令或参数,以下是一个简单的示例,展示如何定义程序的主入口点,并对输入的参数进行解析:

import argparse

def main():

parser = argparse.ArgumentParser(description='软件自动运行工具')

parser.add_argument('script', type=str, help='要自动运行的脚本或程序路径')

parser.add_argument('--log', type=str, default='log.txt', help='日志输出文件(默认为log.txt)')

args = parser.parse_args()

# 调用后续功能,例如运行脚本、记录日志等

run_script(args.script, args.log)

if __name__ == '__main__':

main()

在这段代码中,我们使用了Python的argparse库来解析命令行参数,用户可以通过命令行指定要运行的脚本路径和日志输出文件,主函数main解析这些参数后,会调用后续的功能来实现脚本的运行和日志记录。

第二段:跨平台兼容性的实现

自动运行工具通常需要具备跨平台运行的能力,以便在不同的操作系统上都能正常工作,以下是一个使用Python的subprocess库来实现跨平台运行脚本的示例:

import subprocess

import sys

import os

def run_script(script_path, log_file):

# 根据操作系统选择正确的运行命令

if sys.platform.startswith('win'):

command = ['cmd', '/c', script_path]

elif sys.platform.startswith('linux') or sys.platform.startswith('darwin'):

command = ['bash', '-c', script_path]

else:

raise ValueError('Unsupported platform')

# 运行脚本,并将输出重定向到日志文件

with open(log_file, 'a') as log:

subprocess.run(command, stdout=log, stderr=log)

这段代码首先检查运行工具的操作系统,并根据操作系统类型构建相应的运行命令,然后,它使用subprocess.run函数来执行命令,并将标准输出和标准错误重定向到指定的日志文件中。

第三段:日志记录与监控

自动运行工具在执行过程中通常需要记录日志,以便跟踪运行状态和排查问题,以下是一个简单的日志记录函数的示例:

import logging

import time

def setup_logging(log_file):

logging.basicConfig(filename=log_file, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def log_message(message):

logging.info(f'[{time.strftime("%Y-%m-%d %H:%M:%S")}] {message}')

在这段代码中,我们使用了Python的logging库来设置日志记录,setup_logging函数配置日志记录的基本参数,如日志文件名、记录级别和格式,log_message函数则用于在实际运行时记录消息,每条消息都会带上当前的时间戳。

第四段:异常处理与恢复

自动运行工具在执行过程中可能会遇到各种异常情况,如脚本执行失败、文件不存在等,因此,合理的异常处理机制是必不可少的,以下是一个简单的异常处理示例:

try:

# 尝试执行可能引发异常的代码

run_script(script_path, log_file)

except FileNotFoundError as e:

log_message(f'文件未找到: {e}')

except subprocess.CalledProcessError as e:

log_message(f'脚本执行失败: {e}')

except Exception as e:

log_message(f'未知错误: {e}')

raise # 可选:重新抛出异常以便上层处理

在这段代码中,我们使用try-except语句块来捕获可能发生的异常。根据不同的异常类型,我们记录相应的错误信息,并可以选择性地重新抛出异常以便上层处理。

第五段:守护进程与定时任务

在开发自动运行工具时,实现守护进程的功能可以确保工具在后台持续运行,即使终端会话被关闭或用户注销。同时,定时任务的功能则允许我们根据预设的时间表自动执行特定的任务。

from apscheduler.schedulers.background import BackgroundScheduler

import time

import logging

# 假设这是我们需要定时执行的任务函数

def timed_task():

logging.info("定时任务执行中...")

# 在这里执行你的任务逻辑

time.sleep(5) # 模拟任务执行时间

logging.info("定时任务执行完毕!")

def start_daemon_with_scheduled_task():

# 配置日志记录

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# 创建一个后台调度器实例

scheduler = BackgroundScheduler()

# 添加一个定时任务,每天中午12点执行timed_task函数

scheduler.add_job(timed_task, 'interval', minutes=1) # 示例:每分钟执行一次

scheduler.start()

try:

# 这里可以让主程序继续执行其他任务,或者保持运行以便守护进程持续存在

while True:

time.sleep(1)

except (KeyboardInterrupt, SystemExit):

# 当接收到终止信号时,关闭调度器

scheduler.shutdown()

if __name__ == '__main__':

start_daemon_with_scheduled_task()

在这段代码中,我们使用了APScheduler库来创建一个后台调度器实例,timed_task函数是我们要定时执行的任务,它简单地记录了一条日志并等待了几秒钟来模拟任务执行。

start_daemon_with_scheduled_task函数设置了日志记录,创建了一个调度器,并向其中添加了一个定时任务,在这个例子中,我们设置了一个每分钟执行一次的简单定时任务,但你可以根据需要调整时间和任务。

标签:源代码,logging,log,script,软件,日志,分享,message,运行
From: https://blog.csdn.net/v___SJGLXT/article/details/139839532

相关文章

  • 就业寒冬从面试无力感,到一天2个offer的一些经验分享
    本人是霍格沃兹北京测试开发学社线下3期学员,拥有3年测试工作经验,之前一直在某大厂外包做软件测试,期间主要是以功能测试为主。经过一个月的高强度找工作奋战,最终拿下了3家公司offer,选择了一家自己很满意的公司。上课过程在学习全日制自动化测试课程的过程中,我们难免会遇到各种问......
  • GIS开发面试题分享,附答案!
    ⾃我介绍-AI基础篇1、GIS⼋股⽂基础篇2、Openlayers图形绘制3、倾斜摄影4、主流地图的坐标系5、常⽤的坐标转换软件6、地图上要素很多,加载慢,遇到过崩掉的情况么,前端是如何缓解的7、⼆维和三维的区别8、mapbox和Cesium的区别9、天......
  • 远光九天平台荣获2024广东软件风云榜行业应用解决方案TOP10
    6月13日,远光九天智能一体化云平台(简称:远光九天平台)在2024年粤港澳软件产业高质量发展大会、第十二届粤港云计算大会暨第七届粤港澳ICT大会,被授予2024广东软件风云榜“行业应用解决方案TOP10”奖项。  作为远光软件自主研发的全栈国产化技术底座,远光九天平台是采用云原生架......
  • 推荐几个免费网站安全扫描程序,可用于查找漏洞和恶意软件
    扫描您的网站、博客是否存在安全漏洞、恶意软件、木马、病毒和在线威胁我们经常关注网站设计、SEO和内容,而低估了安全领域。作为网站所有者,网络安全应该比任何事情都重要。以下是根据扫描功能和用户友好性推荐的一些最佳免费网站安全扫描程序。SUCURISUCURI是最受欢迎的免......
  • 武汉凯迪正电气大分享电缆谐振耐压试验原理方法与应用
    一、电缆谐振耐压试验的原理电缆谐振耐压试验是通过改变试验系统的电感量和试验频率使回路处于谐振状态,从而在电缆上产生高电压、大电流以检测电缆的绝缘性能是否满足要求。在谐振状态下试验电源供给的能量仅为回路中消耗的用功功率,大大降低了试验电源的容量减轻了设备的重量......
  • 散户可以做量化吗?有什么个人可以操作的量化软件吗
    恒生Ptrade——盘口扫单盘口扫单主要是对股票代码的行情的实时监控,然后分批次的按目标数量的买入。点击“盘口扫单”-输入需要盘口扫单的股票代码-设置目标扫单数量-选择买卖方向-设置最高限价-选择扫盘盘口-设置扫盘比例-设置扫盘时间-委托量大时可以设置拆单策略......
  • 软件测试入门基础03-MySQL
    前言:这是我个人的学习记录,我是科班在读有一定基础,很多东西不会特别详细,欢迎大佬指点,也很高兴有人看了能得到帮助这一小节的内容是MySQL,我已经修完数据库,但时间久远忘记许多于是又看了一遍做个笔记。印象中数据库挺简单,简单的说就是增删改查。我修这门课时把实验做完基本上知......
  • 软件设计原则
    一、分类    六大软件设计原则:单一职责原则、里式替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则。二、单一职责原则    一个类或者一个模块只负责一个功能。三、里式替换原则    针对继承而言的。子类可以扩展父类的方法,但不能改变父类......
  • 上海交通大学出品《动手学大模型》LLM 实战课,课件+实战教程(教程分享)
    来了来了!上海交通大学的大模型超超超级牛掰的大模型编程实战课公开了,课件+教程,本套实战教程旨在提供大模型相关的入门编程参考。通过简单实践,帮助同学快速入门大模型,更好地开展课程设计或学术研究。上海交大大模型实验室整了一份针对入门阶段的大模型教程,已经看完了非常不......
  • Matlab r2023a v23.2.0 解锁版安装步骤 (工程计算商业数学软件)
    前言Matlab(矩阵实验室)是全球领先的数学计算软件开发商美国MathWorks公司研发的一款面向科学与工程计算的高级语言的商业数学软件,集算法开发、数据分析、可视化和数值计算于一体的编程环境,其核心是仿真交互式矩阵计算,广泛应用于科学计算、数据分析、算法开发和绘图设计等......