当前位置: 代码网 > it编程>前端脚本>Python > 如何定时自启动与自关闭一些python脚本

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

2025年05月20日 Python 我要评论
定时自启动与自关闭一些python脚本是windows系统,要是linux就好了。思路是这样的首先到早上6点整启动脚本或某个软件,然后记录下对应的pid,等到了晚上18点整的时候,自动根据pid再杀死

定时自启动与自关闭一些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)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com