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基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
python运行时间的几种方法
Jun 17 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
python使用Apriori算法进行关联性解析
Dec 21 Python
在OpenCV里实现条码区域识别的方法示例
Dec 04 Python
Python2与Python3的区别点整理
Dec 12 Python
django创建超级用户时指定添加其它字段方式
May 14 Python
pytorch查看通道数 维数 尺寸大小方式
May 26 Python
Python 读取位于包中的数据文件
Aug 07 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 Python
python基于openpyxl生成excel文件
Dec 23 Python
python实现马丁策略的实例详解
Jan 15 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
详解Angular结合zTree异步加载节点数据
2018/01/20 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
python使用KNN算法手写体识别
2018/02/01 Python
Python实现的多叉树寻找最短路径算法示例
2018/07/30 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
彻底理解Python中的yield关键字
2019/04/01 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
2019/06/27 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
C语言编程题
2015/03/09 面试题
诚信承诺书范文
2014/03/27 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
团组织关系介绍信
2019/06/24 职场文书
Python实现Hash算法
2022/03/18 Python
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技