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返回昨天日期的方法
May 13 Python
windows下python之mysqldb模块安装方法
Sep 07 Python
Django自定义用户认证示例详解
Mar 14 Python
Win10下python3.5和python2.7环境变量配置教程
Sep 18 Python
python实现随机漫步方法和原理
Jun 10 Python
使用Pandas对数据进行筛选和排序的实现
Jul 29 Python
jupyter 使用Pillow包显示图像时inline显示方式
Apr 24 Python
如何利用Python识别图片中的文字
May 31 Python
python生成word合同的实例方法
Jan 12 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
详解python网络进程
Jun 15 Python
python对文档中元素删除,替换操作
Apr 02 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使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
JavaScript中的类继承
2010/11/25 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
jquery选择器简述
2015/08/31 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
微信小程序Getuserinfo解决方案图解
2018/08/24 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
python网络编程之数据传输UDP实例分析
2015/05/20 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
Python多进程fork()函数详解
2019/02/22 Python
django配置app中的静态文件步骤
2020/03/27 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
英国床垫在线:Mattress Online
2016/12/07 全球购物
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
印度第一网上礼品店:IGP.com
2020/02/06 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
期末自我鉴定
2014/01/23 职场文书
个人授权委托书范本
2014/09/14 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
医院见习总结
2015/06/24 职场文书
值班管理制度范本
2015/08/06 职场文书
教师理论学习心得体会
2016/01/21 职场文书
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis