小白提个问题,我想用python实现跟计划任务的交互,但是总有问题

LeoHan 0 信誉分
2024-12-05T15:56:55.2333333+00:00

import win32com.client

import datetime as dt

class TaskScheduler:

def __init__(self):

    self.scheduler = win32com.client.Dispatch("Schedule.Service")

    self.scheduler.Connect()

    self.root_folder = self.scheduler.GetFolder("\\")

    

    scheduler = win32com.client.Dispatch("Schedule.Service")

    scheduler.Connect()

    root_folder = scheduler.GetFolder("\\") 

def create_task(self, task_name, trigger_time_str, days_of_week,

                action_path = None,action_arguments = None,description = "",

                author = ""):

    '''

    trigger_time_str:"%Y-%m-%d %H:%M:%S"

    '''

    try:

        trigger_time = dt.datetime.strptime(trigger_time_str,"%Y-%m-%d %H:%M:%S")

    except ValueError as e:

        raise ValueError("Invalid trigger time format. Use ISO 8601 format (YYYY-MM-DDTHH:MM:SS).") from e



    # 转换为任务计划程序所需的格式

    trigger_time_str_formatted = trigger_time.strftime("%Y-%m-%dT%H:%M:%S")



    # 创建一个新的任务定义对象

    task_def = self.scheduler.NewTask(0)

    task_def = scheduler.NewTask(0)

    # 设置任务的注册信息

    registration_info = task_def.RegistrationInfo

    registration_info.Description = description

    registration_info.Author = author  # 可以根据实际情况修改



    # 设置任务的触发器

    trigger = task_def.Triggers.Create(2)  # 1 表示时间触发器

    trigger.StartBoundary = trigger_time_str_formatted

    trigger.DaysInterval = 1  # 对于每周触发器,这个值通常被DaysOfWeek覆盖

    trigger.Repetition.Interval = "PT0M"  # 不重复

    trigger.DaysOfWeek = 127  # 设置触发器适用的星期几



    # 设置任务的操作

    action = task_def.Actions.Create(0)  # 0 表示执行一个程序

    if action_path is None:

        action.Path = ""

        raise ValueError('Parameter:action_path Can Not Be Empty')

    else:

        action.Path = action_path # 一般是python.exe路径或者.bat文件路径

    if action_arguments is None:

        action.Arguments = ""

    else:

        action.Arguments = action_arguments  # 要运行的Python脚本的路径



    # 注册任务

    try:

        self.root_folder.RegisterTaskDefinition(

            task_name,

            task_def,

            6,  # 创建或更新任务

            None,  # 安全描述符

            None,  # 任务登录的用户ID

            3  # 使用任务的主机服务账户运行

        )

        print(f"Task '{task_name}' created successfully.")

    except Exception as e:

        print(f"Failed to create task '{task_name}': {e}")

就是想在每周指定的日期指定的时间运行某个脚本,但是总报错trigger.DaysOfWeek这个属性无法设置,我该怎么办?

Windows API - Win32
Windows API - Win32
一组适用于桌面和服务器应用程序的核心 Windows 应用程序编程接口 (API)。 以前称为 Win32 API。
116 个问题
{count} 票

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。