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处理大数字的方法
May 27 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
Tornado高并发处理方法实例代码
Jan 15 Python
python opencv 直方图反向投影的方法
Feb 24 Python
Python3.7实现中控考勤机自动连接
Aug 28 Python
python文件选择对话框的操作方法
Jun 27 Python
Python3 pickle对象串行化代码实例解析
Mar 23 Python
Python select及selectors模块概念用法详解
Jun 22 Python
python 调用API接口 获取和解析 Json数据
Sep 28 Python
python基于socket模拟实现ssh远程执行命令
Dec 05 Python
python 远程执行命令的详细代码
Feb 15 Python
Python基本知识点总结
Apr 07 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
discuz安全提问算法
2007/06/06 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
php两种无限分类方法实例
2015/04/21 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
JavaScript 继承详解(三)
2009/07/13 Javascript
前端开发的开始---基于面向对象的Ajax类
2010/09/17 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
jQuery日历插件datepicker用法详解
2016/03/03 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
学习RxJS之JavaScript框架Cycle.js
2019/06/17 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
python并发编程之多进程、多线程、异步和协程详解
2016/10/28 Python
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Python实现的计数排序算法示例
2017/11/29 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
使用python接入微信聊天机器人
2020/03/31 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
Django REST framwork的权限验证实例
2020/04/02 Python
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
班组长岗位职责
2014/03/03 职场文书
寻找最美家庭活动方案
2014/08/20 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
四风个人对照检查材料思想汇报(办公室通用版)
2014/10/07 职场文书
财务总监岗位职责
2015/02/03 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
调研报告的主要写法
2019/04/18 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
用python自动生成日历
2021/04/24 Python
浅谈redis整数集为什么不能降级
2021/07/25 Redis
SQL 聚合、分组和排序
2021/11/11 MySQL