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基于PycURL实现POST的方法
Jul 25 Python
python实现分页效果
Oct 25 Python
python中(str,list,tuple)基础知识汇总
Feb 20 Python
关于Python正则表达式 findall函数问题详解
Mar 22 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
浅谈numpy生成数组的零值问题
Nov 12 Python
Python创建字典的八种方式
Feb 27 Python
python通过paramiko复制远程文件及文件目录到本地
Apr 30 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
python如何删除文件、目录
Jun 23 Python
Python 忽略文件名编码的方法
Aug 01 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
Windows下的PHP5.0详解
2006/11/18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(六)
2014/06/23 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
prototype Element学习笔记(篇二)
2008/10/26 Javascript
九种js弹出对话框的方法总结
2013/03/12 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
JS+CSS实现3D切割轮播图
2020/03/21 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
Django发送html邮件的方法
2015/05/26 Python
python中异常捕获方法详解
2017/03/03 Python
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
平面设计师工作职责范文
2013/12/03 职场文书
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
感恩寄语大全
2014/04/11 职场文书
作文批改评语大全
2014/04/23 职场文书
机械设计及其自动化专业求职信
2014/06/09 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
python中mongodb包操作数据库
2022/04/19 Python
Python简易开发之制作计算器
2022/04/28 Python