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中的匿名函数使用简介
Apr 27 Python
Python中遇到的小问题及解决方法汇总
Jan 11 Python
Python中的连接符(+、+=)示例详解
Jan 13 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
用matplotlib画等高线图详解
Dec 14 Python
python查询mysql,返回json的实例
Mar 26 Python
Python在for循环中更改list值的方法【推荐】
Aug 17 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
Django缓存系统实现过程解析
Aug 02 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 Python
python时间time模块处理大全
Oct 25 Python
Python就将所有的英文单词首字母变成大写
Feb 12 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
一个程序下载的管理程序(三)
2006/10/09 PHP
php实现mysql同步的实现方法
2009/10/21 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例
2019/08/13 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
js 数组克隆方法 小结
2010/03/20 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
Bootstarp 基础教程之表单部分实例代码
2017/02/03 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
Python应用库大全总结
2018/05/30 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
在django中自定义字段Field详解
2019/12/03 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
python学习笔记之多进程
2020/08/06 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
Urban Outfitters美国官网:美国生活方式品牌
2016/08/26 全球购物
软件工程专业推荐信
2013/10/28 职场文书
大学班长的职责
2014/01/27 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
教室标语大全
2014/06/21 职场文书
公司合作意向书范文
2014/07/30 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
护士医德考评自我评价
2015/03/03 职场文书