【问题标题】:Is there a way to detect if a computer is brought out of sleep mode?有没有办法检测计算机是否退出睡眠模式?
【发布时间】:2022-01-17 03:37:10
【问题描述】:

问题

我想用 Python 编写一个程序,当脚本检测到它已退出睡眠模式时,就会执行该程序。 例如,我正在使用笔记本电脑。当我打开笔记本电脑时,脚本应该运行。有没有办法检测到这个然后运行脚本?是否有监听此类事件的模块?


目标

最终目标是一种安全系统,如果用户的计算机被使用,警报就会发送到用户手机。我有一个关于警报发送部分的想法,我只是不知道如何首先触发程序。

基本格式应如下所示:
if computer_active == True:
    alert.send("Computer accessed")
    

显然它看起来比这更复杂,但这是一般的想法。

我在 MacOSX v10.15.7 上运行 Python3.10.0

非常感谢任何帮助!

【问题讨论】:

  • 这个python脚本会在睡眠的电脑上运行吗?我想这将取决于操作系统以及它可用于从睡眠中恢复的任何钩子/事件。
  • 如果这必须在任何操作系统中运行,这与仅在 Windows 等操作系统中运行是完全不同的解决方案。在不知道您的要求的情况下,我认为这个问题太开放了,因为根据这些要求的不同,答案会有很大差异。
  • 谢谢@JNevill,你是对的。我刚刚用我正在运行的 Python 版本(3.10)和我正在使用的操作系统版本(MacOSX 10.15.7)更新了这个问题
  • 不知道是否有人为此编写了 python 包装器,但您可以使用 Objective-C 或 Swift 本机与 MacOS 的 API 进行交互,并且您似乎想要这样做:stackoverflow.com/questions/9247710/…
  • 看起来有终端命令可以做到这一点,你可以调用它并从 Python 读取结果:stackoverflow.com/questions/39468539/…

标签: python python-3.x system


【解决方案1】:

一个也许比没有更好的解决方案。它很hacky,它需要一直运行,它不是事件驱动的;但是:它很短,它是可配置的并且是可移植的:-)

'''
Idea: write every some seconds to a file and check regularly.
It is assumed that if the time delta is too big,
the computer just woke from sleep.
'''

import time

TSFILE="/tmp/lastts"
CHECK_INTERVAL=15
CHECK_DELTA = 7

def wake_up_from_sleep():
    print("Do something")

def main():
    while True:
        curtime = time.time()
        with open(TSFILE, "w") as fd:
            fd.write("%d" % curtime)
        time.sleep(CHECK_INTERVAL)
        with open(TSFILE, "r") as fd:
            old_ts = float(fd.read())
        curtime = time.time()
        if old_ts + CHECK_DELTA < curtime:
            wake_up_from_sleep()

if __name__ == '__main__':
    main()

【讨论】:

  • 呵呵,你知道这是否可行吗?这是一个非常有趣的想法,当然很有创意。
  • 嘿,很抱歉两天后在这里与您联系,但我让您的脚本正常工作,并将其集成到警报系统中并且效果很好(顺便说一句,这是一个天才的解决方案)。但是,我确实遇到了@Max 提到的问题,即计算机偶尔会自行唤醒,从而触发警报。你能想出一种方法来规避这种情况吗?我承认,我对计算机唤醒以执行“家务”的内容和方式知之甚少。
猜你喜欢
  • 2011-09-13
  • 2011-03-28
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
相关资源
最近更新 更多