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的面向对象思想分析
Jan 14 Python
Python 查找list中的某个元素的所有的下标方法
Jun 27 Python
pycharm debug功能实现跳到循环末尾的方法
Nov 29 Python
对python中的six.moves模块的下载函数urlretrieve详解
Dec 19 Python
Python设计模式之桥接模式原理与用法实例分析
Jan 10 Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 Python
python输出数组中指定元素的所有索引示例
Dec 06 Python
Python tkinter常用操作代码实例
Jan 03 Python
Python开发之基于模板匹配的信用卡数字识别功能
Jan 13 Python
浅谈Python里面None True False之间的区别
Jul 09 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
python 获取字典键值对的实现
Nov 12 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
杏林同学录(四)
2006/10/09 PHP
PHP通过COM使用ADODB的简单例子
2006/12/31 PHP
php 验证码实例代码
2010/06/01 PHP
php继承中方法重载(覆盖)的应用场合
2015/02/09 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
2014/09/01 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
jQuery版本升级踩坑大全
2016/01/12 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
2016/11/16 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
python数据挖掘需要学的内容
2019/06/23 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
2014植树节活动总结
2014/03/11 职场文书
求职信格式范文
2015/03/19 职场文书
教你nginx跳转配置的四种方式
2022/07/07 Servers