【Python】命令行工具实现监控ctrl+c与运行时长终止任务
按下 Ctrl+C 时优雅地停止任务,你可以使用 Python 的 signal 模块捕获 SIGINT 信号(即 Ctrl+C 发送的中断信号),并在捕获时执行清理操作或退出程序。
import argparse
import signal
import sys
import time# 全局标志,用于控制主循环是否继续运行
running = Truedef signal_handler(sig, frame):global runningprint("\n[INFO] Ctrl+C pressed. Stopping gracefully...")running = Falsedef main():global running# 设置信号捕获signal.signal(signal.SIGINT, signal_handler)# 解析命令行参数parser = argparse.ArgumentParser()parser.add_argument('-a', '--age', type=int, default=1, help='age.')parser.add_argument('-d', '--duration', type=int, default=None, help='Duration to run.')parser.add_argument('-n', '--name', type=str, default='mdwsw')args = parser.parse_args()print(f"[INFO] Starting task with name: {args.name}")if args.duration:print(f"[INFO] Will run for {args.duration} seconds unless interrupted.")start_time = time.time()try:while running:# 模拟任务执行print("Running task...")time.sleep(1)# 如果设置了运行时间,检查是否超时if args.duration and (time.time() - start_time) >= args.duration:print("[INFO] Duration reached. Exiting.")breakexcept Exception as e:print(f"[ERROR] Exception occurred: {e}")finally:print("[INFO] Cleaning up resources...")if __name__ == "__main__":main()