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中的错误处理
Apr 10 Python
python中的字典使用分享
Jul 31 Python
详解python如何调用C/C++底层库与互相传值
Aug 10 Python
Python中sort和sorted函数代码解析
Jan 25 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
python之线程通过信号pyqtSignal刷新ui的方法
Jan 11 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
使用 Django Highcharts 实现数据可视化过程解析
Jul 31 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
使用Keras实现Tensor的相乘和相加代码
Jun 18 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
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
php curl post 时出现的问题解决
2014/01/30 PHP
php根据年月获取季度的方法
2014/03/31 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
php有效防止同一用户多次登录
2015/11/19 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
php提取微信账单的有效信息
2018/10/01 PHP
使用requestAnimationFrame实现js动画性能好
2015/08/06 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
一分钟理解js闭包
2016/05/04 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
Jquery和CSS实现选择框重置按钮功能
2018/11/08 jQuery
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
微信小程序实现签到弹窗动画
2020/09/21 Javascript
Python中实现常量(Const)功能
2015/01/28 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
使用tensorflow实现线性回归
2018/09/08 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
旅游管理毕业生自荐信
2013/11/05 职场文书
关于礼仪的演讲稿
2014/01/04 职场文书
同学会邀请书大全
2014/01/12 职场文书
初中语文教学反思
2014/02/02 职场文书
环境工程专业自荐信范文
2014/03/18 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL