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中Continue语句的用法的举例详解
May 14 Python
Python操作使用MySQL数据库的实例代码
May 25 Python
sublime text 3配置使用python操作方法
Jun 11 Python
Python实现Selenium自动化Page模式
Jul 14 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
Python vtk读取并显示dicom文件示例
Jan 13 Python
Python中实现输入超时及如何通过变量获取变量名
Jan 18 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
Python列表的深复制和浅复制示例详解
Feb 12 Python
Python利用folium实现地图可视化
May 23 Python
python实现自定义日志的具体方法
May 28 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 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
PHP文件下载类
2006/12/06 PHP
php 将excel导入mysql
2009/11/09 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
PHP中shuffle数组值随便排序函数用法
2014/11/21 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
Bootstrap精简教程
2015/11/27 Javascript
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
微信小程序实现批量倒计时功能
2020/11/01 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
python实现图片批量压缩程序
2018/07/23 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
Tea Collection官网:一家位于旧金山的童装公司
2020/08/07 全球购物
中医药大学市场营销专业自荐信
2013/09/29 职场文书
项目总经理岗位职责
2014/02/14 职场文书
会走路的树教学反思
2014/02/20 职场文书
《生命的药方》教学反思
2014/04/08 职场文书
注册资产评估专业求职信
2014/07/16 职场文书
会议欢迎词范文
2015/01/27 职场文书
Pandas数据类型之category的用法
2021/06/28 Python
redis复制有可能碰到的问题汇总
2022/04/03 Redis
Mysql排查分析慢sql之explain实战案例
2022/04/19 MySQL