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之for循环语句
Oct 02 Python
Python远程桌面协议RDPY安装使用介绍
Apr 15 Python
在Django的视图中使用数据库查询的方法
Jul 16 Python
python根据京东商品url获取产品价格
Aug 09 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
浅谈django三种缓存模式的使用及注意点
Sep 30 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
python调用摄像头拍摄数据集
Jun 01 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
Dec 31 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
Python深度学习之实现卷积神经网络
Jun 05 Python
python 爬取天气网卫星图片
Jun 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
服务器端解压缩zip的脚本
2006/12/22 PHP
php 获取一个月第一天与最后一天的代码
2010/05/16 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
发布一个基于javascript的动画类 Fx.js
2010/11/05 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
vue实现循环切换动画
2018/10/17 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
测试、预发布后用python检测网页是否有日常链接
2014/06/03 Python
python安装PIL模块时Unable to find vcvarsall.bat错误的解决方法
2016/09/19 Python
python2.7的编码问题与解决方法
2016/10/04 Python
Python面向对象特殊成员
2017/04/24 Python
关于python的list相关知识(推荐)
2017/08/30 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
pycharm 解除默认unittest模式的方法
2018/11/30 Python
python创建子类的方法分析
2019/11/28 Python
YUV转为jpg图像的实现
2019/12/09 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
医药代表个人求职信范本
2013/12/19 职场文书
募捐倡议书
2014/04/14 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
公司庆典欢迎词
2015/01/26 职场文书
委托书的样本
2015/01/28 职场文书
利用python Pandas实现批量拆分Excel与合并Excel
2021/05/23 Python
Python编程源码报错解决方法总结经验分享
2021/10/05 Python