Python Обновление системного времени - PullRequest
1 голос
/ 23 сентября 2019

У меня есть приложение, которое чувствительно ко времени на удаленном сервере - оно должно быть запущено в определенный момент.Постоянно зацикливаясь и получая серверное время, я не подхожу так близко, как хотелось бы.Я пытаюсь извлечь время сервера и обновить время моей системы (Python 3.7, windows 10) заранее, чтобы модуль мог перезапуститься как можно ближе ко времени сервера.Я нашел функцию SetSysemTime в win32api.

Вот двухстрочный модуль, который я создал для проверки различных подходов:

import win32api
win32api.SetSystemTime(2020,9,1,21,9,10,10,0)

Когда я запускаю это, я получаю следующую ошибку:

Traceback (последний вызов был последним): файл "C: \ Users \ pinev \ AppData \ Local \ Programs \ Python \ Python37 \ Projects \ Threading Tests \ settime.py", строка 4, в win32api.SetSystemTime(2020,9,1,21,9,10,10,0) pywintypes.error: (1314, 'SetSystemTime', 'Требуемая привилегия не удерживается клиентом.')

Так что, похоже, у меня есть правильное решение, но каким-то образом нужно изменить привилегию модуля, чтобы Win10 обработал запрос.Я исследовал способы установки привилегий в модуле Python и не могу найти ничего, что работает.Если бы кто-нибудь мог предоставить решение или ссылку, он был бы очень признателен.

Заранее спасибо.

1 Ответ

0 голосов
/ 24 сентября 2019

Если вам просто нужно повысить привилегии для запуска программ на Python, вы можете запустить программу от имени администратора.

Это также самый простой и прямой метод, как мне кажется.

Тестовый код:

import win32api
import ctypes, sys

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

if is_admin():
    win32api.SetSystemTime(2020,9,1,21,9,10,10,0)
else:
    # Re-run the program with admin rights
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
...