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中用memcached来减少数据库查询次数的教程
Apr 07 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
33个Python爬虫项目实战(推荐)
Jul 08 Python
python识别文字(基于tesseract)代码实例
Aug 24 Python
python程序 创建多线程过程详解
Sep 23 Python
python函数map()和partial()的知识点总结
May 26 Python
基于python实现音乐播放器代码实例
Jul 01 Python
python实现最短路径的实例方法
Jul 19 Python
Python 数据的累加与统计的示例代码
Aug 03 Python
python smtplib发送多个email联系人的实现
Oct 09 Python
Django实现翻页的示例代码
May 24 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中$_FILES的使用方法及注意事项说明
2014/02/14 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
js 验证身份证信息有效性
2014/03/28 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
vue axios封装及API统一管理的方法
2019/04/18 Javascript
React学习之受控组件与数据共享实例分析
2020/01/06 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
Python中使用动态变量名的方法
2014/05/06 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
Python 定义只读属性的实现方式
2020/03/05 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
Python非单向递归函数如何返回全部结果
2020/12/18 Python
美国存储和组织商店:The Container Store
2017/08/16 全球购物
中职生自荐信
2013/10/13 职场文书
个人自我鉴定怎么写
2013/10/28 职场文书
学习党的群众路线实践活动思想汇报
2014/09/12 职场文书
在教室放鞭炮的检讨书
2014/09/28 职场文书
创先争优承诺书
2015/01/20 职场文书
补充协议书
2015/01/28 职场文书
公积金贷款承诺书
2015/04/30 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
英镑符号 £
2022/02/17 杂记
python的列表生成式,生成器和generator对象你了解吗
2022/03/16 Python