有没有办法通过 python 3 将任务添加到 Windows 任务调度程序?

新手上路,请多包涵

我有一个生成 GUI 的主要 python 脚本,通过该 GUI,我希望用户能够创建、修改和删除由 Windows 任务计划程序管理的计划。

原文由 I_do_python 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 684
2 个回答

我还需要一种使用 Python 在 Windows 10 中安排任务的方法。我发现了一些更简单的方法,仅使用 subprocess 和 PowerShell 的 Scheduled Tasks cmdlets ,它更强大,因为它可以让您更好地控制超过要安排的任务。

而且这个不需要第三方模块。

 import subprocess

# Use triple quotes string literal to span PowerShell command multiline
STR_CMD = """
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "C:\\path\\to\\file.ps1"
$description = "Using PowerShell's Scheduled Tasks in Python"
$settings = New-ScheduledTaskSettingsSet -DeleteExpiredTaskAfter (New-TimeSpan -Seconds 2)
$taskName = "Test Script"
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddSeconds(10)
$trigger.EndBoundary = (Get-Date).AddSeconds(30).ToString("s")
Register-ScheduledTask -TaskName $taskName -Description $description -Action $action -Settings $settings -Trigger $trigger | Out-Null
"""

# Use a list to make it easier to pass argument to subprocess
listProcess = [
    "powershell.exe",
    "-NoExit",
    "-NoProfile",
    "-Command",
    STR_CMD
]

# Enjoy the magic
subprocess.run(listProcess, check=True)

原文由 howdoicode 发布,翻译遵循 CC BY-SA 4.0 许可协议

此代码创建一个将在 5 分钟内运行的任务(使用 pywin32 ):

 import datetime
import win32com.client

scheduler = win32com.client.Dispatch('Schedule.Service')
scheduler.Connect()
root_folder = scheduler.GetFolder('\\')
task_def = scheduler.NewTask(0)

# Create trigger
start_time = datetime.datetime.now() + datetime.timedelta(minutes=5)
TASK_TRIGGER_TIME = 1
trigger = task_def.Triggers.Create(TASK_TRIGGER_TIME)
trigger.StartBoundary = start_time.isoformat()

# Create action
TASK_ACTION_EXEC = 0
action = task_def.Actions.Create(TASK_ACTION_EXEC)
action.ID = 'DO NOTHING'
action.Path = 'cmd.exe'
action.Arguments = '/c "exit"'

# Set parameters
task_def.RegistrationInfo.Description = 'Test Task'
task_def.Settings.Enabled = True
task_def.Settings.StopIfGoingOnBatteries = False

# Register task
# If task already exists, it will be updated
TASK_CREATE_OR_UPDATE = 6
TASK_LOGON_NONE = 0
root_folder.RegisterTaskDefinition(
    'Test Task',  # Task name
    task_def,
    TASK_CREATE_OR_UPDATE,
    '',  # No user
    '',  # No password
    TASK_LOGON_NONE)

有关任务及其属性的更多信息,请访问: https ://learn.microsoft.com/en-us/windows/desktop/taskschd/task-scheduler-objects

原文由 xuhcc 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题