用python挂起/休眠pc

时间:2011-09-22 15:37:56

标签: python sleep suspend

我想写一个简短的python脚本让我的电脑进入睡眠状态。我已经搜索了API,但暂停的唯一结果与延迟执行有关。诀窍有什么作用?

7 个答案:

答案 0 :(得分:6)

我不知道怎么睡觉。但我知道如何休眠(在Windows上)。也许这就足够了?     shutdown.exe 是你的朋友!从命令提示符运行它。

要查看其选项     shutdown.exe /?

我相信一个hibernate调用会是:     shutdown.exe /h

所以,在python中将它们放在一起:

import os
os.system("shutdown.exe /h")

但正如其他人所提到的,使用os.system是。请改用popen。但是,如果你像我一样懒,它的一个小脚本就是它们! os.system它适合我。

答案 1 :(得分:3)

如果你有pywin32和ctypes,那么不使用shell执行:

import ctypes
import win32api
import win32security

def suspend(hibernate=False):
    """Puts Windows to Suspend/Sleep/Standby or Hibernate.

    Parameters
    ----------
    hibernate: bool, default False
        If False (default), system will enter Suspend/Sleep/Standby state.
        If True, system will Hibernate, but only if Hibernate is enabled in the
        system settings. If it's not, system will Sleep.

    Example:
    --------
    >>> suspend()
    """
    # Enable the SeShutdown privilege (which must be present in your
    # token in the first place)
    priv_flags = (win32security.TOKEN_ADJUST_PRIVILEGES |
                  win32security.TOKEN_QUERY)
    hToken = win32security.OpenProcessToken(
        win32api.GetCurrentProcess(),
        priv_flags
    )
    priv_id = win32security.LookupPrivilegeValue(
       None,
       win32security.SE_SHUTDOWN_NAME
    )
    old_privs = win32security.AdjustTokenPrivileges(
        hToken,
        0,
        [(priv_id, win32security.SE_PRIVILEGE_ENABLED)]
    )

    if (win32api.GetPwrCapabilities()['HiberFilePresent'] == False and
        hibernate == True):
            import warnings
            warnings.warn("Hibernate isn't available. Suspending.")
    try:
        ctypes.windll.powrprof.SetSuspendState(not hibernate, True, False)
    except:
        # True=> Standby; False=> Hibernate
        # https://msdn.microsoft.com/pt-br/library/windows/desktop/aa373206(v=vs.85).aspx
        # says the second parameter has no effect.
#        ctypes.windll.kernel32.SetSystemPowerState(not hibernate, True)
        win32api.SetSystemPowerState(not hibernate, True)

    # Restore previous privileges
    win32security.AdjustTokenPrivileges(
        hToken,
        0,
        old_privs
    )

如果你只想要一个带有pywin32的单行并且已经具有正确的权限(对于简单的,个人脚本):

import win32api
win32api.SetSystemPowerState(True, True)  # <- if you want to Suspend
win32api.SetSystemPowerState(False, True)  # <- if you want to Hibernate

注意:如果您的系统已禁用休眠模式,它将暂停。在第一个函数中,我包括一个检查,至少警告这个。

答案 2 :(得分:2)

获取pywin32,如果我没记错的话,它还包含win32security。然后再次尝试提到的script

答案 3 :(得分:2)

import os
os.system(r'rundll32.exe powrprof.dll,SetSuspendState Hibernate')

答案 4 :(得分:1)

如果您使用的是Windows,请参阅:http://permalink.gmane.org/gmane.comp.python.windows/7382

答案 5 :(得分:0)

您可以从python脚本运行shell命令。请参阅subprocess module,然后搜索适用于您的操作系统的命令。

答案 6 :(得分:0)

subprocess.call(['osascript', '-e','tell app "System Events" to sleep'])