Python脚本获取操作系统版本信息


Posted in Python onDecember 17, 2016

查看系统版本信息是一件家常便饭的事情,有时候需要将版本信息录入到资产管理系统中,如果每次手动的去查询这些信息再录入系统那么是一件令人呢头疼的事情,如果采用脚本去完成这件事情,那么情况就有所不同了。

在Python的世界里,获取Windows版本信息和Linux的版本信息都可以采用platform模块,但platform模块也不是万能的,有些特殊的信息(比如Windows的内部版本号)这个模块拿不到,那么只能另辟蹊径了。

在Linux系统中,可以简单的认为一切都是文件,那么就算没有现成的命令可用时,可以用open()文件的方法通过对文件的读写控制它。而在Windows的大部分信息在注册表中都能查到,因此可以从注册表上下手。Windows注册表是一个好东西,拿数据就像在Linux下一切都是文件一样方便,如果想用Python访问注册表,除了权限外就是需要模块了,在Python中_winreg是一个内置模块,通过这一模块可以对注册表进行读写。

本脚本收集了一些获取版本信息的常见方法,除了platform模块外,还有其他的模块可供使用,因为platform模块不是内置模块,因此需要额外安装。Windows下运行脚本需要考虑权限问题和中文字符的问题,解决Python打印中文字符的问题是通过脚本中的get_system_encoding()函数实现的,这个函数取自Django,经过测试这个函数还是非常好用的。

注:在PyCharm中,经常遇到Run窗口打印出的中文显示乱码,代码中没有经过正确转码是一方面,而IDE的编码设置也是一方面。如果是在Windows下开发,那么建议代码用UTF-8编写,IDE的编码则设置为“GBK”,设置方法“File”-->"Settings"-->"Editor"-->"File Encoding"-->"IDE Encoding"选择“<System Default (now GBK)>”, "Project Encoding"选择UTF-8保证代码的编码一致性。

Python脚本获取操作系统版本信息

脚本如下:

#!/usr/bin/python
# encoding: utf-8
# -*- coding: utf8 -*-
"""
Created by PyCharm.
File:        LinuxBashShellScriptForOps:getSystemVersion.py
User:        Guodong
Create Date:    2016/12/16
Create Time:    14:51
 """
import sys
import os
import platform
import subprocess
import codecs
import locale


def get_system_encoding():
  """
  The encoding of the default system locale but falls back to the given
  fallback encoding if the encoding is unsupported by python or could
  not be determined. See tickets #10335 and #5846
  """
  try:
    encoding = locale.getdefaultlocale()[1] or 'ascii'
    codecs.lookup(encoding)
  except Exception:
    encoding = 'ascii'
  return encoding


DEFAULT_LOCALE_ENCODING = get_system_encoding()

mswindows = (sys.platform == "win32") # learning from 'subprocess' module
linux = (sys.platform == "linux2")

hidden_hostname = True

if mswindows:
  uname = list(platform.uname())
  if hidden_hostname:
    uname[1] = "hidden_hostname"
  print uname

  import _winreg

  try:
    reg_key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion")
    if reg_key:
      ProductName = _winreg.QueryValueEx(reg_key, "ProductName")[0] or None
      EditionId = _winreg.QueryValueEx(reg_key, "EditionId")[0] or None
      ReleaseId = _winreg.QueryValueEx(reg_key, "ReleaseId")[0] or None
      CurrentBuild = _winreg.QueryValueEx(reg_key, "CurrentBuild")[0] or None
      BuildLabEx = _winreg.QueryValueEx(reg_key, "BuildLabEx")[0][:9] or None
      print (ProductName, EditionId, ReleaseId, CurrentBuild, BuildLabEx)
  except Exception as e:
    print e.message.decode(DEFAULT_LOCALE_ENCODING)

if linux:
  uname = list(platform.uname())
  if hidden_hostname:
    uname[1] = "hidden_hostname"
  print uname

  proc_obj = subprocess.Popen(r'uname -a', shell=True, stdout=subprocess.PIPE,
                stderr=subprocess.STDOUT)
  result = proc_obj.stdout.read().strip().decode(DEFAULT_LOCALE_ENCODING)
  if result:
    print result

  if os.path.isfile("/proc/version"):
    with open("/proc/version", 'r') as f:
      content = f.read().strip()
    if content != "":
      print content

  if os.path.isfile("/etc/issue"):
    with open("/etc/issue", 'r') as f:
      content = f.read().strip()
    if content != "":
      print content

截图如下:

(1)注册表信息获取位置:

Python脚本获取操作系统版本信息

(2)Windows环境下的输出:

Python脚本获取操作系统版本信息

(3)Linux环境下的输出:

Python脚本获取操作系统版本信息

Python 相关文章推荐
Python函数式编程指南(四):生成器详解
Jun 24 Python
Python运算符重载详解及实例代码
Mar 07 Python
使用Python对MySQL数据操作
Apr 06 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 Python
Python基础教程之异常详解
Jan 10 Python
Python 控制终端输出文字的实例
Jul 12 Python
python opencv实现证件照换底功能
Aug 19 Python
基于Python实现拆分和合并GIF动态图
Oct 22 Python
python实现猜数游戏(保存游戏记录)
Jun 22 Python
python给视频添加背景音乐并改变音量的具体方法
Jul 19 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 Python
关于PySnooper 永远不要使用print进行调试的问题
Mar 04 Python
详解python中xlrd包的安装与处理Excel表格
Dec 16 #Python
详解python开发环境搭建
Dec 16 #Python
python制作爬虫爬取京东商品评论教程
Dec 16 #Python
python用模块zlib压缩与解压字符串和文件的方法
Dec 16 #Python
Python用UUID库生成唯一ID的方法示例
Dec 15 #Python
python常见的格式化输出小结
Dec 15 #Python
python中子类继承父类的__init__方法实例
Dec 15 #Python
You might like
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
JavaScript 事件对象的实现
2009/07/13 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
微信小程序上线发布流程图文详解
2019/05/06 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
Python SQLite3数据库操作类分享
2014/06/10 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
Python 修改列表中的元素方法
2018/06/26 Python
python如何制作缩略图
2019/04/30 Python
python实现桌面托盘气泡提示
2019/07/29 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
药学专业毕业生求职信
2013/10/20 职场文书
计算机专业毕业生推荐信
2013/11/25 职场文书
给儿子的表扬信
2014/01/15 职场文书
教师读书活动总结
2014/05/07 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
企业晚会策划方案
2014/05/29 职场文书
2015年元旦演讲稿
2014/09/12 职场文书
英文感谢信格式
2015/01/21 职场文书
个人年度总结报告
2015/03/09 职场文书
个人催款函范文
2015/06/24 职场文书
董事长秘书工作总结
2015/08/14 职场文书
MySQL数据库表约束讲解
2022/06/21 MySQL