我想在后台长时间运行python脚本。基本上,我正在尝试制作一个生产力脚本,该脚本将在程序运行时强制关闭分散注意力的应用程序。例如,用户输入30分钟,然后在接下来的30分钟内,该程序将运行,并强制关闭Steam或Google Chrome之类的东西。

当前,我使用带有守护程序线程的while循环来工作,该线程不断检查正在运行的应用程序,并在需要时关闭一个应用程序:

while True:
    p_tasklist = subprocess.Popen('tasklist.exe /fo csv',
                                  stdout=subprocess.PIPE,
                                  universal_newlines=True)

    for p in csv.DictReader(p_tasklist.stdout):
        if p['Image Name'] == 'myProgram.exe':
            os.system('taskkill /im myProgram.exe')


但是很明显,这非常占用CPU资源(一个CPU核心的利用率为100%),我试图以某种方式设置事件侦听器,以侦听要打开的新程序,但到目前为止仍未成功。

我试图根据这项工作做出一些贡献:

while True
    # listen for new program to be opened then run next block
        if program == program_to_close:
            close program


编辑:
为了防止人们过早地结束我的脚本,我需要尽快关闭不需要的程序。否则,脚本可以通过任务管理器结束,这对于那些缺乏自我控制能力的人来说,整个事情变得毫无意义。

编辑2:
任务管理器是我希望强制关闭的程序之一,而不是专门用于Steam的程序。我并不是要制造恶意软件或禁用某人的计算机,如果他们绝对需要退出,他们可以重新启动计算机。

最佳答案

您当前不断执行外部应用程序会消耗大量资源。从时间导入睡眠,并将sleep(1)或sleep(5)放入while循环中。这将减少您的CPU使用率。

就像是:

from time import sleep
...your imports...

while True:
    p_tasklist........
    if matches your criteria:
        close program
    sleep(number_of_seconds)

10-07 19:25
查看更多