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 psutil模块简单使用实例
Apr 28 Python
python之PyMongo使用总结
May 26 Python
Python 网页解析HTMLParse的实例详解
Aug 10 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
May 24 Python
Django开发中的日志输出的方法
Jul 02 Python
Django 中间键和上下文处理器的使用
Mar 17 Python
远程部署工具Fabric详解(支持Python3)
Jul 04 Python
使用python模拟高斯分布例子
Dec 09 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
python virtualenv虚拟环境配置与使用教程详解
Jul 13 Python
Django路由层URLconf作用及原理解析
Sep 24 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
基于mysql的bbs设计(三)
2006/10/09 PHP
默默简单的写了一个模板引擎
2007/01/02 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
php实现记事本案例
2020/10/20 PHP
利用javascript的面向对象的特性实现限制试用期
2011/08/04 Javascript
JS 表单验证大全
2011/11/23 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
js限制文本框的输入内容代码分享(3类)
2015/08/20 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
three.js 将图片马赛克化的示例代码
2020/07/31 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
跟老齐学Python之总结参数的传递
2014/10/10 Python
Python多维/嵌套字典数据无限遍历的实现
2016/11/04 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
自考毕业自我鉴定范文
2013/10/27 职场文书
工程业务员工作职责
2013/12/07 职场文书
集体婚礼证婚词
2014/01/13 职场文书
医院合作协议书
2014/08/19 职场文书