如何定时自启动与自关闭一些python脚本

Written by

in

文章目录
  • 是windows系统,要是linux就好了。
  • 以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。 您可能感兴趣的文章: python实现定时任务的多种方式详解 使用Python编写一个定时任务提醒系统 Python实现定时自动清除浏览器cookies的方法 使用Python实现一个优雅的异步定时器 python logging模块详解及其日志定时清理方式 Python定时查询starrocks数据库并将结果保存在excel
  • 目录
    • 定时自启动与自关闭一些python脚本
      • 思路是这样的
      • 总之为了避免这个情况
    • 总结

      是windows系统,要是linux就好了。

      首先到早上6点整启动脚本或某个软件,然后记录下对应的pid,等到了晚上18点整的时候,自动根据pid再杀死对应进程。

      定时开启与关闭用apscheduler,示例代码如下:

      from apscheduler.schedulers.blocking  import BlockingScheduler 
      
      def start_scripts():
      	pass
      	
      def kill_processes():
      	pass
      	
      if __name__ == "__main__":
          
      	scheduler = BlockingScheduler()
      	# 添加定时任务(crontab格式)
      	scheduler.add_job(start_scripts, 'cron', hour=6, minute=0   # 启动 
      	scheduler.add_job(kill_processes, 'cron', hour=18, minute=0  # 终止 
      	print("监控程序已启动")
      	try:
      		scheduler.start() 
      	except (KeyboardInterrupt, SystemExit):
      		pass 
          

      为了保证启动程序的时候获取到对应的真实pid,使用subprocess依赖库

      import subprocess 
      
      
      try:
      	subprocess.Popen(
      		["python", script], 
      		cwd="d:/file/script/start.py",
      		creationflags=subprocess.CREATE_NEW_CONSOLE)
      except Exception as e:
      	print(f"启动失败:{str(e)}")
      	
      try:
      	proc = subprocess.Popen(
      		["d:/file/soft/server.exe"], 
      		cwd="d:/file/soft/")
      	pid = str(proc.pid)
      	with open("pid.txt", 'a') as f:         
              f.write(f"server.exe-pid={pid}n")
      except Exception as e:
      	print(f"启动失败:{str(e)}")
      
      	

      启动脚本窗口的没有在这里获取pid,是因为一旦开启新窗口后,通过proc.pid获取的无效,AI说是:

      • 在Windows 7及更早版本中,创建新控制台时会生成conhost.exe 宿主进程
      • 返回的PID指向的是控制台宿主进程,而非实际目标进程
      • 新架构差异:Windows 8+ 采用了conhost与终端分离的新架构,而Win7使用传统模式

      我在被启动的python脚本里面读取pid,使用的psutil库,如下:

      import psutil 
      
      current_process = psutil.Process()
      pid = str(current_process.pid)
      print(f"当前进程ID: {pid}")
      with open("pid.txt", 'a') as f:         
          f.write(f"script-1-pid={pid}n") 

      这样就可以避免返回的pid异常问题了. 后期等到晚上18点的时候读取pid文件,按顺序kill即可。

      当然如果希望每隔一段时间执行一次,可以这样:

      def print_fun():
      	print("执行时间:", time.asctime())
      
      scheduler.add_job(print_fun, 'interval', seconds=10)
      

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持风君子博客。

      您可能感兴趣的文章:

      • python实现定时任务的多种方式详解
      • 使用Python编写一个定时任务提醒系统
      • Python实现定时自动清除浏览器cookies的方法
      • 使用Python实现一个优雅的异步定时器
      • python logging模块详解及其日志定时清理方式
      • Python定时查询starrocks数据库并将结果保存在excel

      站内搜索