当前位置: 首页 > 面试题库 >

Python检查已完成和失败的Task Windows调度程序

易元青
2023-03-14
问题内容

有谁知道我可以查看的方式或资源来检查任务计划程序中所有Windows任务的状态?我想看看是否看到任务失败或成功。我想在Python中做到这一点。

我已经看过一些使用win32com.client模块的信息。我可以看到什么任务,但是找不到完成的工作的状态。

import win32com.client
scheduler = win32com.client.Dispatch("Schedule.Service")
scheduler.Connect()
tasks = scheduler.GetRunningTasks(1)
names = [tasks.Item(i+1).Name for i in range(tasks.Count)]
print names

问题答案:

以下内容使用Task Scheduler API来打印所有已注册任务的基本信息,包括最后的运行时间和结果。

import win32com.client

TASK_ENUM_HIDDEN = 1
TASK_STATE = {0: 'Unknown',
              1: 'Disabled',
              2: 'Queued',
              3: 'Ready',
              4: 'Running'}

scheduler = win32com.client.Dispatch('Schedule.Service')
scheduler.Connect()

n = 0
folders = [scheduler.GetFolder('\\')]
while folders:
    folder = folders.pop(0)
    folders += list(folder.GetFolders(0))
    tasks = list(folder.GetTasks(TASK_ENUM_HIDDEN))
    n += len(tasks)
    for task in tasks:
        settings = task.Definition.Settings
        print('Path       : %s' % task.Path)
        print('Hidden     : %s' % settings.Hidden)
        print('State      : %s' % TASK_STATE[task.State])
        print('Last Run   : %s' % task.LastRunTime)
        print('Last Result: %s\n' % task.LastTaskResult)
print('Listed %d tasks.' % n)

这仅从列表中的根文件夹开始。每次循环都会弹出一个文件夹。推送其所有子文件夹;并列出文件夹中的任务。它一直持续到文件夹列表为空。

COM接口

  • ITaskService
  • ITaskFolder
  • IRegisteredTask
  • ITaskDefinition
  • ITaskSettings

另外,这是一个walk_tasks在标准库上建模的生成器os.walk

import os
import pywintypes
import win32com.client

TASK_ENUM_HIDDEN = 1
TASK_STATE = {
    0: 'Unknown',
    1: 'Disabled',
    2: 'Queued',
    3: 'Ready',
    4: 'Running'
}

def walk_tasks(top, topdown=True, onerror=None, include_hidden=True,
               serverName=None, user=None, domain=None, password=None):
    scheduler = win32com.client.Dispatch('Schedule.Service')
    scheduler.Connect(serverName, user, domain, password)
    if isinstance(top, bytes):
        if hasattr(os, 'fsdecode'):
            top = os.fsdecode(top)
        else:
            top = top.decode('mbcs')
    if u'/' in top:
        top = top.replace(u'/', u'\\')
    include_hidden = TASK_ENUM_HIDDEN if include_hidden else 0
    try:
        top = scheduler.GetFolder(top)
    except pywintypes.com_error:
        if onerror is not None:
            onerror(error)
        return
    for entry in _walk_tasks_internal(top, topdown, onerror, include_hidden):
        yield entry


def _walk_tasks_internal(top, topdown, onerror, flags):
    try:
        folders = list(top.GetFolders(0))
        tasks = list(top.GetTasks(flags))
    except pywintypes.com_error as error:
        if onerror is not None:
            onerror(error)
        return

    if not topdown:
        for d in folders:
            for entry in _walk_tasks_internal(d, topdown, onerror, flags):
                yield entry

    yield top, folders, tasks

    if topdown:
        for d in folders:
            for entry in _walk_tasks_internal(d, topdown, onerror, flags):
                yield entry

if __name__ == '__main__':
    n = 0
    for folder, subfolders, tasks in walk_tasks('/'):
        n += len(tasks)
        for task in tasks:
            settings = task.Definition.Settings
            print('Path       : %s' % task.Path)
            print('Hidden     : %s' % settings.Hidden)
            print('State      : %s' % TASK_STATE[task.State])
            print('Last Run   : %s' % task.LastRunTime)
            print('Last Result: %s\n' % task.LastTaskResult)
    print('Listed %d tasks.' % n)


 类似资料:
  • 我看到了“krbeexception:Checksum failed”异常。看起来像是kerberos问题,但我无法解决。 任何关于如何解决问题的建议都会很好!提前谢谢。 机器细节: 没有可用的LSB模块。发行商ID:Ubuntu说明:Ubuntu 12.04.4 LTS发行版:12.04 java版本“1.7.0_55”OpenJDK运行时环境(IcedTea 2.4.7)(7u55-2.4.7

  • 我最近在kubernetes集群中将我的Apache Flink升级到1.11版,但今天我发现一个任务检查点总是失败。此任务从RabbitMQ读取数据并计算结果并调用HTTP请求将数据保存到MySQL。这是任务管理器错误日志输出: 这是Apache FlinkUI错误消息: 工作总是在一段时间内重新启动。我有2个任务,另一个任务检查点保持成功。那么问题出在哪里,我应该怎么做才能解决这个问题? 这是

  • 我相信字段选择器可能有一个bug,但只是想知道是否有任何修复或解决方案的细节。

  • 我有一个服务器端应用程序,客户端可以请求重新加载配置。如果一个客户端请求重新加载配置,这不应该立即完成,而是延迟1分钟。如果另一个客户端也在同一分钟内请求重新加载配置,这个请求应该被忽略。 我的想法是安排一个任务与调度ExecutorService像: 如何检查LoadConfigurationTask是否已计划但尚未执行,以便在重新加载配置之前忽略进一步的请求?

  • 所以我想知道,我想看看一个表是否已经被懒/急加载了,而没有在我检查时实际加载它。例如: 所以当我设置($this)时-

  • 问题内容: 我正在尝试使用Flink 5.x Elasticsearch接收器连接器将数据插入到微型VM上托管的ES 5.2.1实例。 由于这是处于开发模式的微型VM,因此我无法使其启动以接受9300上的TransportClient远程客户端连接,而不会失败引导检查。 我已经尝试了以下设置,但无法启动(9200上的http客户端工作正常) 请注意,ES仅出于开发目的而在小型VM上运行,而我无权进