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实现把回车符\r\n转换成\n
Apr 23 Python
CentOS6.5设置Django开发环境
Oct 13 Python
利用python的socket发送http(s)请求方法示例
May 07 Python
Python3中在Anaconda环境下安装basemap包
Oct 21 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
Python爬虫 bilibili视频弹幕提取过程详解
Jul 31 Python
Python如何调用外部系统命令
Aug 07 Python
Python识别html主要文本框过程解析
Feb 18 Python
python Timer 类使用介绍
Dec 28 Python
python中if和elif的区别介绍
Nov 07 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 define函数的使用说明
2008/08/27 PHP
php获取apk包信息的方法
2014/08/15 PHP
php画图实例
2014/11/05 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
对比分析json及XML
2014/11/28 Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
2018/03/02 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
vue实现折线图 可按时间查询
2020/08/21 Javascript
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
python中的装饰器详解
2015/04/13 Python
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
Python通过Pygame绘制移动的矩形实例代码
2018/01/03 Python
目前最全的python的就业方向
2018/06/05 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
python装饰器使用实例详解
2019/12/14 Python
python实现Oracle查询分组的方法示例
2020/04/30 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
留守儿童工作方案
2014/06/02 职场文书
专科生就业求职信
2014/06/22 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
2015社区爱国卫生工作总结
2015/04/21 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
MySQL普通表如何转换成分区表
2022/05/30 MySQL
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server