python有超时的windows系统时间设置代码
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python有超时的windows系统时间设置代码,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2395字,纯文字阅读大概需要4分钟。
内容图文
手边的笔记本用久了,cmos电池可能又没电了。每次开机时间都不对,导致访问一些有https的网页会出现警告信息。
于是找了找通过python脚本设置系统时间的方法,发现了两种,其一是调用socket直接发送udp包到国家授时中心,其二是调用ntplib包。我在本地电脑ping 国家授时中心地址cn.pool.ntp.org有时出现丢包,然而,二者都没有检查udp是否丢包的机制,方法一在udp丢包后一直处于阻塞状态无法退出,方法二虽然会提示超时,但是不再做其它尝试,比如重新发包,或者向同一个域名的不同IP地址发包。于是,尝试在方法一的代码基础上,增加了超时机制,并且尝试向同一个域名的不同IP地址发包。
具体修改后的完整代码如下:
# -*- coding:utf-8 -*- import socket import struct import time import win32api import os import re def 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 whilenot 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_result def 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]
参考:
[1]方法一:使用Python设置系统时间(给系统校时) - 网海水手 - 博客频道 - CSDN.NET
[2]方法二:python第三方库推荐 - 通过ntplib在windows上同步时间 - mattkang - 博客频道 - CSDN.NET
[3]ntplib源码:https://pypi.python.org/pypi/ntplib/
[4]socket 设置超时:attributes - Python Socket timeout error - Stack Overflow
[5]Python Socket API 笔记 - my2010Sam的专栏 - 博客频道 - CSDN.NET
[6]python执行系统命令的方法 :os.system(),subprocess.popen(),commands - 白杨的日志 - 网易博客
[7]windows安装python:http://my.oschina.net/bailiangcn/blog/288538#OSC_h2_2
[8]国家授时中心 IP 210.72.145.44 不可用了吗? - 开源中国社区
原文:http://www.cnblogs.com/jiangz/p/5204367.html
内容总结
以上是互联网集市为您收集整理的python有超时的windows系统时间设置代码全部内容,希望文章能够帮你解决python有超时的windows系统时间设置代码所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。