python有超时的windows系统时间设置代码
手边的笔记本用久了,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
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_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=address if __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 不可用了吗? - 开源中国社区
python有超时的windows系统时间设置代码的更多相关文章
- Windows系统中设置Python程序定时运行方法
Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索“计划任务”,并且点击打开“计划任务”: 2.点击“创建基 ...
- H3C交换机系统时间设置漏洞
H3C交换机系统时间设置存在漏洞 1. 背景说明 由于在编写<主机房网络延伸实施方案>,调试H3C S5120S-28P-EI交换机时,发现交换机设置成现在的时间后,导致本地用户通过ssh ...
- Windows系统时间(FILETIME和SYSTEMTIME)
转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8654298 欢迎关注微博:http://weibo.com/MoreWi ...
- [记]Windows 系统下设置Nodejs NPM全局路径
Windows下的Nodejs npm路径是appdata,担心安装的node_modules越来越多,导致C盘满,所以参考别人的博文,将node_modules安装的默认目录修改一下. 参考Wind ...
- [2014.5.22][UBUNTU]Ubuntu与Windows系统时间不同步的问题
安装Ubuntu+Windows双系统时会遇到Windows和Ubuntu系统时间不同步的问题,这是由于Windows系统默认读取主板bios等硬件系统时间作为OS的当地时间;而MAc,Linux类的 ...
- Linux 系统时间设置
from:https://blog.csdn.net/yjh314/article/details/51669238 今早看到一台机器时间对不上,本以为系统时间与网络北京时间不同步,就在终端命令执行网 ...
- Linux系统时间设置(转载)
Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟, ...
- Linode KVM安装Windows系统的设置方法
以前我们用老的Linode VPS主机的时候是采用的XEN架构的,如今我们新注册账户,以及新开的机器是KVM架构.根据后台的设置,我们看到好多网友有在LINODE中安装WINDOWS系统,理论上是可以 ...
- Talend 将Oracle中数据导入到hive中,根据系统时间设置hive分区字段
首先,概览下任务图: 流程是,先用tHDFSDelete将hdfs上的文件删除掉,然后将oracle中的机构表中的数据导入到HDFS中:建立hive连接->hive建表->tJava获取系 ...
随机推荐
- Java中随机数的产生方式与原理
查阅随机数相关资料,特做整理 首先说一下java中产生随机数的几种方式 在j2se中我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0-1之间的一个double,我们可以 ...
- IP地址分类
- Netty(一)引题
本文介绍Java BIO(同步阻塞IO),伪异步IO,NIO(非阻塞IO),AIO(异步IO)这四种IO的情况,并对不同IO模型作比较. 目录 1.BIO 2.伪异步IO 3.NIO 4.AIO 5. ...
- JavaScript的几种Math函数,random(),ceil(),round(),floor()
1.Math.random():返回 0 ~ 1 之间的随机数.2.Math.ceil():返回值:返回大于或等于x,并且与之最接近的整数(如果x是正数,则把小数"入":如果x是负 ...
- MyEclipse使用心得:集成和使用Maven的方法
MyEclipse下载:http://www.myeclipsecn.com/download/ 第一步:下载和安装 1.官网下载Maven:http://maven.apache.org/downl ...
- iOS之关于 srand() 和rand()
srand(seed)用来将随机序列的起始点设为seed srand((int)time(0))表示以当前时间对应的int值为随机序列起点,这样每次运行程序,由于起点不同才可以得到不同的随机数 tim ...
- 关于csrss.exe和winlogon.exe进程多、占用CPU高的解决办法,有人在暴力破解
关于csrss.exe和winlogon.exe进程多.占用CPU高的解决办法 最近VPS的CPU一直处在100%左右,后台管理上去经常打不开,后来发现上远程都要好半天才反映过来,看到任务管理器有多个 ...
- Android自定义控件5--轮播图广告ViewPager基本实现
本文地址:http://www.cnblogs.com/wuyudong/p/5918021.html,转载请注明源地址. 本文开始实现轮播图广告系列,这篇文章首先实现让图片滑动起来(ViewPage ...
- TabLayout和ViewPager简单实现页卡的滑动
首先需要在当前的module中的build Gradle的 dependencies中加入以下句子 compile 'com.android.support:design:23.0.1' 因为我们用到 ...
- OAuth2.0 四种授权模式
OAuth2.0简单笔记(四种授权模式) 金天:坚持写东西,不是一件容易的事,换句话说其实坚持本身都不是一件容易的事.如果学习有捷径,那就是不断实践,不断积累.写笔记,其实是给自己看的,是体现积累的一 ...