【问题标题】:Python Updating system timePython 更新系统时间
【发布时间】:2020-01-23 07:24:27
【问题描述】:

我有一个对远程服务器上的时间敏感的应用程序——它需要在特定的时刻运行。连续循环和检索服务器时间并没有让我像我想要的那样接近。我正在尝试检索服务器时间并提前更新我的系统时间(Python 3.7,Windows 10),以便模块可以尽可能接近服务器时间重新启动。我在win32api中找到了SetSysemTime函数。

这是我为测试各种方法而创建的两行模块:

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', 'A required privilege is notheld by the client.')

看来我有正确的解决方案,但不知何故需要更改模块的权限才能让 Win10 处理请求。我研究了在 Python 模块中设置权限的方法,但似乎找不到任何有效的方法。如果有人可以提供解决方案或参考,将不胜感激。

提前致谢。

【问题讨论】:

  • 没有这方面的专家,但从文档看来您需要SE_SYSTEMTIME_NAME 权限,这可能会对您有所帮助stackoverflow.com/questions/32776233/…
  • 你打算如何计算传输时间?
  • 我已经进行了无数次定时尝试,并且对离开我的机器并到达服务器所需的时间有了相当准确的感觉。如果我来得太早,我会被拒绝;通过改变我的起步(在正式开放时间之前多少,我提交我的请求),我对我可以多早开始并在开始时间后不久到达有了很好的了解。我用它来估计传输时间。我有两个位置,一个具有 750 Mbps 的上传速度,一个具有 350 Mbps 的上传速度。我必须在每个位置使用不同的因素。

标签: python winapi windows-10 elevated-privileges


【解决方案1】:

如果您只需要提升权限来运行 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)

【讨论】:

  • 感谢您的推荐。我收到了提升到管理员权限的消息,但仍然收到错误消息“客户端未持有所需的权限”。您的解决方案在您的环境中有效吗?它发现 sys.version_info[0] >=3,argv 为 None 并返回 None。
  • @steve 奇怪的是,我昨天测试的时候,代码运行正常。但是我已经更改了代码并缩写了一些不必要的代码。现在它应该可以工作了。
  • @steve 这对你有帮助吗?
  • 经过更多测试后,我已成功使用您以前的版本。它改变了时间,但它仍然给我错误信息。不确定。我正在尝试研究各种功能和权限,看看我是否可以修复它。这是仍然存在的错误消息:
  • 重新启动:C:\Users\pinev\AppData\Local\Programs\Python\Python37\settime6.py = 我现在是 root。 Traceback(最近一次调用最后):文件“C:\Users\pinev\AppData\Local\Programs\Python\Python37\settime6.py”,第 15 行,在 win32api.SetSystemTime(2021,9,4,25 ,4,10,10,0) pywintypes.error: (1314, 'SetSystemTime', 'A required privilege is notheld by the client.') >>>
猜你喜欢
  • 2017-08-19
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多