Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python更新系统时间_Python_Winapi_Windows 10_Elevated Privileges - Fatal编程技术网

Python更新系统时间

Python更新系统时间,python,winapi,windows-10,elevated-privileges,Python,Winapi,Windows 10,Elevated Privileges,我有一个对远程服务器上的时间敏感的应用程序,它需要在特定的时刻运行。不断循环和检索服务器时间并不能让我达到我想要的程度。我正在尝试检索服务器时间并提前更新系统时间(Python 3.7、windows 10),以便模块可以在尽可能接近服务器时间的情况下重新启动。我在win32api中找到了setysemtime函数 以下是我创建的两行模块,用于测试各种方法: import win32api win32api.SetSystemTime(2020,9,1,21,9,10,10,0) 当我运行此命

我有一个对远程服务器上的时间敏感的应用程序,它需要在特定的时刻运行。不断循环和检索服务器时间并不能让我达到我想要的程度。我正在尝试检索服务器时间并提前更新系统时间(Python 3.7、windows 10),以便模块可以在尽可能接近服务器时间的情况下重新启动。我在win32api中找到了setysemtime函数

以下是我创建的两行模块,用于测试各种方法:

import win32api
win32api.SetSystemTime(2020,9,1,21,9,10,10,0)
当我运行此命令时,会出现以下错误:

回溯(最近一次呼叫最后一次): 文件“C:\Users\pinev\AppData\Local\Programs\Python\37\Projects\Threading Tests\settime.py”,第4行,在 win32api.SetSystemTime(2020,9,1,21,9,10,10,0) pywintypes.error:(1314,“SetSystemTime”,“客户端未持有所需的权限”。)

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


提前感谢。

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

没有这方面的专家,但从文档中可以看出,您需要
SE\u SYSTEMTIME\u NAME
许可,这可能会帮助您如何计算传输时间?我已经进行了多次计时尝试,并对离开我的机器和到达服务器所需的时间有了相当准确的感觉。如果我来得太早,我会被拒绝;通过改变我的启动时间(在正式开放时间之前多少时间,我提交我的请求),我很清楚我可以多早开始,并在开始时间后不久到达。我用它来估计传输时间。我有两个位置,一个是750 Mbps,另一个是350 Mbps上传速度。我必须在每个位置使用不同的因素。谢谢你的推荐。我收到了提升为管理员权限的消息,但仍然收到错误消息“客户端未持有所需的权限”。您的解决方案在您的环境中有效吗?它发现sys.version_info[0]大于等于3,argv为None并返回None。@steve奇怪的是,当我昨天测试它时,代码工作正常。但是我更改了代码并缩写了一些不必要的代码。现在它应该可以工作了。@steve这对你有帮助吗?经过一些测试,我已经成功地使用了你以前的版本。它改变了时间,但仍然给我错误信息。我不确定。我试图研究各种功能和权限,看看是否可以修复它。下面是持续出现的错误消息:RESTART:C:\Users\pinev\AppData\Local\Programs\Python\Python37\settime6.py=我现在是root用户。回溯(最近一次调用):文件“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',客户端不持有所需的特权。)>>