python脚本设置超时机制系统时间的方法


Posted in Python onFebruary 21, 2016

本文为大家介绍了python脚本设置系统时间的方法,一共有两种,其一是调用socket直接发送udp包到国家授时中心,其二是调用ntplib包。我在本地电脑ping 国家授时中心地址cn.pool.ntp.org有时出现丢包,然而,二者都没有检查udp是否丢包的机制,方法一在udp丢包后一直处于阻塞状态无法退出,方法二虽然会提示超时,但是不再做其它尝试,比如重新发包,或者向同一个域名的不同IP地址发包。于是,尝试在方法一的代码基础上,增加了超时机制,并且尝试向同一个域名的不同IP地址发包。

python脚本设置超时机制系统时间的方法

具体修改后的完整代码如下:

#-*- 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]

以上就是本文的全部内容,希望对大家的学习有所帮助。

Python 相关文章推荐
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
Apr 05 Python
将Python代码嵌入C++程序进行编写的实例
Jul 31 Python
十个Python程序员易犯的错误
Dec 15 Python
Python简单网络编程示例【客户端与服务端】
May 26 Python
pip安装Python库时遇到的问题及解决方法
Nov 23 Python
Python实现对一个函数应用多个装饰器的方法示例
Feb 09 Python
DataFrame中的object转换成float的方法
Apr 10 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 Python
Django 限制访问频率的思路详解
Dec 24 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
Go语言基于Socket编写服务器端与客户端通信的实例
Feb 19 #Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 #Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 #Python
Python实现以时间换空间的缓存替换算法
Feb 19 #Python
Python使用爬虫猜密码
Feb 19 #Python
使用Python简单的实现树莓派的WEB控制
Feb 18 #Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 #Python
You might like
phpMyAdmin2.11.6安装配置方法
2008/08/24 PHP
openflashchart 2.0 简单案例php版
2012/05/21 PHP
一个基于jquery的文本框记数器
2012/09/19 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
jquery插件tooltipv顶部淡入淡出效果使用示例
2013/12/05 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
JavaScript返回网页中锚点数目的方法
2015/04/03 Javascript
JS绘制生成花瓣效果的方法
2015/08/05 Javascript
JavaScript制作淘宝星级评分效果的思路
2020/06/23 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
2018/09/18 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
js编写简易的计算器
2020/07/29 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
python列表去重的二种方法
2014/02/14 Python
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
Unicode和Python的中文处理
2017/03/19 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
大二自我鉴定范文
2013/10/05 职场文书
关爱残疾人标语
2014/06/25 职场文书
学校与家长安全责任书
2014/07/23 职场文书
社区两委对照检查材料
2014/08/23 职场文书