时间:2021-05-22
本文为大家介绍了python脚本设置系统时间的方法,一共有两种,其一是调用socket直接发送udp包到国家授时中心,其二是调用ntplib包。我在本地电脑ping 国家授时中心地址cn.pool.ntp.org有时出现丢包,然而,二者都没有检查udp是否丢包的机制,方法一在udp丢包后一直处于阻塞状态无法退出,方法二虽然会提示超时,但是不再做其它尝试,比如重新发包,或者向同一个域名的不同IP地址发包。于是,尝试在方法一的代码基础上,增加了超时机制,并且尝试向同一个域名的不同IP地址发包。
具体修改后的完整代码如下:
#-*- coding:utf-8 -*-import socketimport structimport timeimport win32apiimport osimport redef getTime(TimeServerAddresses): TIME_1970 = 2208988800L client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) client.settimeout(3) data = '\x1b' + 47 * '\0' #TimeServer_ip=socket.gethostbyname('cn.pool.ntp.org') #TimeServer_ip='202.118.1.130' Port=123 for address in TimeServerAddresses: success=False count=0 while not success and count<3: print address,count try: client.sendto(data, (address, Port)) data, address = client.recvfrom(1024) success=True except socket.timeout: print 'Request timed out!' count=count+1 if success==True:a break data_result = struct.unpack('!12I', data)[10] data_result -= TIME_1970 return data_resultdef setSystemTime(now_time): tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst = time.gmtime(now_time) win32api.SetSystemTime(tm_year, tm_mon, tm_wday, tm_mday, tm_hour, tm_min, tm_sec, 0) print "Set System OK!"def getServerIP(): res1=os.popen('nslookup cn.pool.ntp.org') result1=res1.read() addresses=result1.split('\n\n')[1].split('\n')[1][12:].split(',') return addresses #for address in addresses: # res=os.popen('ping -n 2 '+address) # result=res.read() # received_num=int(re.findall('Received = [0-9]',result)[0].split('=')[1]) # if received_num > 1: # break #TimeServer=addressif __name__ == '__main__': addresses=getServerIP() now_time=getTime(addresses) setSystemTime(now_time) print "%d-%d-%d %d:%d:%d" % time.localtime(now_time)[:6]以上就是本文的全部内容,希望对大家的学习有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
背景:最近写的Python代码不知为何,总是执行到一半卡住不动,为了使程序能够继续运行,设置了函数调用超时机制。代码:importtimeimportsigna
本文为大家分享了两种python脚本设置系统时间的方法,供大家参考,具体内容如下第一种方法,使用Python设置系统时间,即给系统校时#电脑时间用了一段时间后,
前面学习过等待-通知机制,现在我们在其基础上添加一个超时机制,模拟从连接池中获取、使用和释放连接的过程。客户端获取连接的过程被设定为等待超时模式,即如果在100
插件机制是代码/功能反向依赖注入到主体程序的一种方法,编译型语言通过动态加载动态库实现插件。对于Python这样的脚本语言,实现插件机制更简单。机制Python
一般情况下设置PHP脚本执行超时的时间一、在php.ini里面设置max_execution_time=1800;二、通过PHP的ini_set函数设置ini_