踩坑记录
- 在windows通过注册服务调用批处理是无法唤起windows视窗的,也无法识别%appdata%,%userprofile%这样的相对路径,视窗可以通过进程去调,而相对路径的写法,必须换为绝对路径
- 目前一般采用loguru作为python日志功能实现,用法比较符合使用java开发者的习惯
- 定时任务尽量不要使用schedule实现,使定时任务常驻cpu不太合理,而是使用sched
话不多说,看代码
- windows开启服务
import win32service
from loguru import logger
# 开启服务
def start_service(name): #严格的服务名作为传参
try:
hSCManager = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)
handle = win32service.OpenService(hSCManager, name, win32service.SC_MANAGER_ALL_ACCESS)
if handle:
win32service.StartService(handle, None)
win32service.CloseServiceHandle(handle)
return True
except Exception as e:
logger.warning("重启服务异常:{}", e)
- 设置定时任务
import sched
from loguru import logger
def job():
logger.warning("我使每60秒执行一次的定时任务")
job_handler = sched.scheduler(time.time, time.sleep)
# 此处添加任务
def perform(inc):
job_handler.enter(inc, 0, perform, (inc,))
job()
# 60秒一次,此函数在业务逻辑调用
def sheduled_job(inc=60):
# 定时任务
job_handler.enter(0, 0, perform, (inc,))
job_handler.run()
- 启动进程
import os
progress_path = "C:/python3810"
def startProgress():
os.chdir(path)
# 使用绝对路径
os.popen(path + '\\python.exe')