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 help()函数用法详解
Mar 11 Python
零基础写python爬虫之爬虫编写全记录
Nov 06 Python
10款最好的Web开发的 Python 框架
Mar 18 Python
Python第三方库的安装方法总结
Jun 06 Python
pandas创建新Dataframe并添加多行的实例
Apr 08 Python
浅析python继承与多重继承
Sep 13 Python
Django中提供的6种缓存方式详解
Aug 05 Python
python psutil监控进程实例
Dec 17 Python
详解Python中import机制
Sep 11 Python
Opencv python 图片生成视频的方法示例
Nov 18 Python
Jupyter Notebook 安装配置与使用详解
Jan 06 Python
yolov5返回坐标的方法实例
Mar 17 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按单词截取字符串的方法
2015/04/07 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
js同比例缩放图片的小例子
2013/10/30 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
jQuery中live()方法用法实例
2015/01/19 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
2017/03/10 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
史上最为详细的javascript继承(推荐)
2019/05/18 Javascript
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
python使用pymysql实现操作mysql
2016/09/13 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
使用python去除图片白色像素的实例
2019/12/12 Python
详解python with 上下文管理器
2020/09/02 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
美国最受欢迎的度假目的地优惠套餐:BookVIP
2018/09/27 全球购物
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
淘宝客服工作职责
2014/07/11 职场文书
应收账款管理制度
2015/08/06 职场文书
运动会班级口号霸气押韵
2015/12/24 职场文书
2019年教师入党申请书
2019/06/27 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
Python中的socket网络模块介绍
2022/07/23 Python