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 相关文章推荐
sqlalchemy对象转dict的示例
Apr 22 Python
用实例解释Python中的继承和多态的概念
Apr 27 Python
python实现识别相似图片小结
Feb 22 Python
利用python批量修改word文件名的方法示例
Oct 17 Python
Python下载网络小说实例代码
Feb 03 Python
基于django传递数据到后端的例子
Aug 16 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
Sep 02 Python
Linux下升级安装python3.8并配置pip及yum的教程
Jan 02 Python
python图片剪裁代码(图片按四个点坐标剪裁)
Mar 10 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
Python如何获取文件指定行的内容
May 27 Python
python打包多类型文件的操作方法
Sep 21 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
discuz7 phpMysql操作类
2009/06/21 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
2013/01/13 PHP
PHP empty函数报错解决办法
2014/03/06 PHP
php遍历文件夹下的所有文件和子文件夹示例
2014/03/20 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
PHP中file_exists函数不支持中文名的解决方法
2014/07/26 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
2019/06/14 PHP
php经典趣味算法实例代码
2020/01/21 PHP
PHP7 windows支持
2021/03/09 PHP
用js生产批量批处理执行命令
2008/07/28 Javascript
ExtJS 2.2.1的grid控件在ie6中的显示问题
2009/05/04 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
一个JavaScript防止表单重复提交的实例
2014/10/21 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
关于vuex的学习实践笔记
2017/04/05 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
详解微信小程序调起键盘性能优化
2018/07/24 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
2020/01/05 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
keep-alive不能缓存多层级路由菜单问题解决
2020/03/10 Javascript
[01:17:55]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
python通过socket查询whois的方法
2015/07/18 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
如何通过python画loss曲线的方法
2019/06/26 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
canvas实现手机的手势解锁的步骤详细
2020/03/16 HTML / CSS
办公室秘书自我鉴定
2014/01/18 职场文书
开学第一天的感想
2015/08/10 职场文书