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实现的简单窗口倒计时界面实例
May 05 Python
分享一个简单的python读写文件脚本
Nov 25 Python
Python自定义简单图轴简单实例
Jan 08 Python
python机器学习理论与实战(四)逻辑回归
Jan 19 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
简单了解Python3里的一些新特性
Jul 13 Python
Python中注释(多行注释和单行注释)的用法实例
Aug 28 Python
wxPython实现文本框基础组件
Nov 18 Python
使用Pyhton 分析酒店针孔摄像头
Mar 04 Python
pycharm中import呈现灰色原因的解决方法
Mar 04 Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 Python
python跨文件使用全局变量的实现
Nov 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新手上路(十)
2006/10/09 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
PHP执行系统命令函数实例讲解
2021/03/03 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
JS date对象的减法处理实现代码
2010/12/28 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
2014/10/17 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
nodejs 如何手动实现服务器
2018/08/20 NodeJs
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
深入学习Python中的装饰器使用
2016/06/20 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
Python实现基本数据结构中栈的操作示例
2017/12/04 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
python邮件发送smtplib使用详解
2020/06/16 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
Python中模块(Module)和包(Package)的区别详解
2019/08/07 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
公证书样本
2014/04/10 职场文书
幼儿园评语大全
2014/04/17 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
设备技术员岗位职责
2015/04/11 职场文书
写给女朋友的保证书
2015/05/09 职场文书
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL