Suspend / Hibernate ПК с питоном - PullRequest
       74

Suspend / Hibernate ПК с питоном

2 голосов
/ 22 сентября 2011

Я хотел бы написать короткий скрипт на python, который переводит мой компьютер в спящий режим.Я уже искал API, но единственный результат в приостановке связан с отложенным выполнением.Какую функцию выполняет трюк?

Ответы [ 6 ]

6 голосов
/ 23 ноября 2012

Я не знаю, как спать.Но я знаю, как в спящий режим (на Windows).Возможно, этого достаточно?shutdown.exe твой друг!Запустите его из командной строки.

Чтобы увидеть его параметры, выполните shutdown.exe /?

Я полагаю, что вызов гибернации будет: shutdown.exe /h

Итак, собрав все это вместев Python:

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

Но, как уже упоминали другие, это плохо использовать os.system.Используйте вместо этого попен.Но, если вы ленивый, как я, и это небольшой сценарий их ме!os.system это для меня.

4 голосов
/ 07 сентября 2016

Не прибегая к выполнению оболочки, если у вас есть pywin32 и ctypes:

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 и уже имеете необходимые разрешения (для simple , персональный сценарий):

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

Примечание: , если ваша система отключила спящий режим, она будет приостановлена.В первую функцию я включил проверку, чтобы хотя бы предупредить об этом.

2 голосов
/ 28 октября 2011
import os
os.system(r'rundll32.exe powrprof.dll,SetSuspendState Hibernate')
2 голосов
/ 23 сентября 2011

Получить pywin32 , он также содержит win32security, если я правильно помню.Затем попробуйте упомянутый скрипт еще раз.

1 голос
/ 22 сентября 2011

Если вы используете Windows, см .: http://permalink.gmane.org/gmane.comp.python.windows/7382

0 голосов
/ 22 сентября 2011

Вы можете запустить команду оболочки из скрипта Python.См. модуль подпроцесса , а затем найдите подходящую команду для вашей операционной системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...