查看系统版本信息是一件家常便饭的事情,有时候需要将版本信息录入到资产管理系统中,如果每次手动的去查询这些信息再录入系统那么是一件令人呢头疼的事情,如果采用脚本去完成这件事情,那么情况就有所不同了。

在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"选择“”, "Project Encoding"选择UTF-8保证代码的编码一致性。

脚本如下:

#!/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)注册表信息获取位置:

(2)Windows环境下的输出:

(3)Linux环境下的输出:

python查看系统信息_Python脚本获取操作系统版本信息相关推荐

  1. ansible playbook脚本获取系统版本信息

    ansible playbook脚本获取系统版本信息 执行环境说明 脚本执行过程中实测系统为 redhat6.redhat7 suse11 suse12: [root@ansible_host ~]# ...

  2. python操作系统-Python实现获取操作系统版本信息方法

    最近,想在我的YouMoney(http://code.google.com/p/youmoney/)里面增加提取用户操作系统版本信息.比如windows用户,可能要返回Windows XP ,或者W ...

  3. 批处理命令之精确获取操作系统版本信息

    作者:朱金灿 来源:http://blog.csdn.net/clever101 为了使得批处理命令获取更大的通用性,有时需要获取操作系统版本.今天为此搜了一些资料,网上的说法是Ver.注册表.WMI ...

  4. CentOS操作系统版本信息查看和隐藏

    工作中需要查看一下操作系统版本,或者是源码编译安装时,到网上下载对应的源码包,需要提前获取操作系统版本信息.然而,操作系统信息能简单使用命令获取,显然是不安全的,这样给我们的系统带来很大的隐患.这就需 ...

  5. 查看服务器操作系统版本信息,查看服务器操作系统版本信息

    查看服务器操作系统版本信息 内容精选 换一换 简要介绍OptiPNG是一个PNG优化器,可将图像文件重新压缩为更小的尺寸,而不会丢失任何信息.该程序还可以将外部格式(BMP,GIF,PNM和TIFF) ...

  6. (1)python pyinstaller打包exe添加版本信息(2)python获取exe版本信息(3)pyqt5开发exe添加检查版本更新功能

    笔者总结不容易点个关注吧    一键三联哦!       感谢您! python pyinstaller打包exe添加版本信息 打包并添加版本信息 注意!这里有个坑 如果第二次要修改版权信息 要将fi ...

  7. windows和linux主机名,windows和linux下如何远程获取操作系统版本和主机名

    远程获取windows和linux操作系统版本和主机名需要具备以下条件: 假设 主机A(windows 7),ip:192.168.12.2 主机B(centos 6.3),ip:192.168.12 ...

  8. python | 查看pip支持的文件名和版本

    python | 查看pip支持的文件名和版本 win下查询 大哥推荐已经解决 win下查询 import pip._internalprint(pip._internal.pep425tags.ge ...

  9. linux查看操作系统版本信息

    一.linux下如何查看已安装的centos版本信息: 1.Linux查看当前操作系统版本信息 cat /proc/version Linux version 2.6.32-696.el6.x86_6 ...

  10. Linux查看当前操作系统版本信息

    # cat /proc/version (Linux查看当前操作系统版本信息)

最新文章

  1. DCN-2655 同异步端口PPP (chap)认证
  2. 1.3-date命令
  3. 基于ESP8266-01s 增加对于FZ35恒流电子负载WiFi接口
  4. yolov5 face 使用踩坑记录
  5. python 归纳 (十二)_并发队列Queue的使用
  6. 计算机什么存放bois程序,[硬件维护]问一个基础性的问题:BIOS程序到底存放在哪个芯片里?...
  7. javascript --- 创建一个二维数组
  8. DICOM开发工具总结
  9. 神经网路权重初始化方式
  10. java的gui的design模式怎么打开_手机越用越卡怎么办?打开这五个隐藏按钮,1分钟解决卡顿问题...
  11. uniapp —— 配合腾讯地图实现小程序自动定位
  12. LockSupport类中的park()和unpark()
  13. Adobe Photoshop 2021哪会出,PS2021功能界面抢先看
  14. noip2015初赛入围名单
  15. 我的python学习(前言 初生牛犊不怕虎)
  16. python关于模块说法错误的是_python常用模块错题
  17. Banner 怎么实现轮播不同尺寸的图片
  18. POJ 【1088】 滑雪
  19. Python + OpenCV + DeepLearning 解数独问题【一、数独的提取】
  20. 黑马程序员——Java语言基础——关键字、表示符、常量、变量及数据的类型、运算符

热门文章

  1. 【储留香系列】如何构建一个拖垮公司的备份系统
  2. 【数据预测】基于matlab人工蜂群算法优化BP神经网络数据预测 (含优化前对比)【含Matlab源码 078期】
  3. 【优化算法】可变步长LMS算法(VSS-LMS)【含Matlab源码 317期】
  4. 【图像增强】基于matlab GUI暗通道+Retinex图像去雾(带面板)【含Matlab源码 732期】
  5. 【纸牌识别】基于matlab灰度二值化纸牌识别【含Matlab源码 464期】
  6. 【光学】基于matlab夫琅禾费圆孔衍射【含Matlab源码 062期】
  7. php-openssl降级,openssl升级降级
  8. ai人工智能数据处理分析_建立数据平台以实现分析和AI驱动的创新
  9. 构建ai数据库_为使用AI的所有人构建更安全的互联网
  10. 解决方案:Windows下修改hosts文件