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 相关文章推荐
wxPython学习之主框架实例
Sep 28 Python
更改Python命令行交互提示符的方法
Jan 14 Python
python模拟enum枚举类型的方法小结
Apr 30 Python
Python进阶篇之字典操作总结
Nov 16 Python
Python实现多进程共享数据的方法分析
Dec 04 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
Python 处理图片像素点的实例
Jan 08 Python
Python爬虫实战之12306抢票开源
Jan 24 Python
对pandas处理json数据的方法详解
Feb 08 Python
Flask框架学习笔记之消息提示与异常处理操作详解
Aug 15 Python
100行Python代码实现每天不同时间段定时给女友发消息
Sep 27 Python
python中数组和列表的简单实例
Mar 25 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
php在字符串中查找另一个字符串
2008/11/19 PHP
php设计模式 Singleton(单例模式)
2011/06/26 PHP
PHP中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
javascript脚本调试方法小结
2008/11/24 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
JS实现屏蔽shift,Ctrl,alt等功能键的方法
2015/06/01 Javascript
在React框架中实现一些AngularJS中ng指令的例子
2016/03/06 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
Bootstrap实现模态框效果
2019/09/30 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
python实现用户登录系统
2016/05/21 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
基于Python实现扑克牌面试题
2019/12/11 Python
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
某公司C#程序员面试题笔试题
2014/05/26 面试题
保洁主管岗位职责
2013/11/20 职场文书
劳资人员岗位职责
2013/12/19 职场文书
个人简历自我评价
2014/02/02 职场文书
保险专业自荐信范文
2014/02/20 职场文书
2014年会策划方案
2014/05/11 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
博士论文答辩开场白
2015/06/01 职场文书
就业推荐表院系意见
2015/06/05 职场文书
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL