利用Python指令碼擷取Windows和Linux的系統版本資訊

來源:互聯網
上載者:User

標籤:python 系統版本   windows 組建   python操作註冊表   

    查看系統版本資訊是一件家常便飯的事情,有時候需要將版本資訊錄入到資產管理系統中,如果每次手動的去查詢這些資訊再錄入系統那麼是一件令人呢頭疼的事情,如果採用指令碼去完成這件事情,那麼情況就有所不同了。

    在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保證代碼的編碼一致性。

650) this.width=650;" title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" border="0" alt="image" src="http://s3.51cto.com/wyfs02/M02/8B/A7/wKiom1hTq8qj_iAsAANfbzAONsk729.png" height="558" />

指令碼如下:

#!/usr/bin/python# encoding: utf-8# -*- coding: utf8 -*-"""Created by PyCharm.File:               LinuxBashShellScriptForOps:getSystemVersion.pyUser:               GuodongCreate Date:        2016/12/16Create Time:        14:51 """import sysimport osimport platformimport subprocessimport codecsimport localedef 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 encodingDEFAULT_LOCALE_ENCODING = get_system_encoding()mswindows = (sys.platform == "win32")  # learning from ‘subprocess‘ modulelinux = (sys.platform == "linux2")hidden_hostname = Trueif 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

註:指令碼內容可以通過GitHub擷取,地址:https://github.com/DingGuodong/LinuxBashShellScriptForOps/blob/master/functions/system/getSystemVersion.py:。

如下:

(1)註冊表資訊擷取位置:

650) this.width=650;" title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" border="0" alt="image" src="http://s3.51cto.com/wyfs02/M01/8B/A7/wKiom1hTq8zBxU_qAAOKQjWLr1o654.png" height="618" />

(2)Windows環境下的輸出:

650) this.width=650;" title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" border="0" alt="image" src="http://s3.51cto.com/wyfs02/M02/8B/A3/wKioL1hTq82h7zDzAABR_tXHjF8283.png" height="393" />

(3)Linux環境下的輸出:

650) this.width=650;" title="image" style="border-top:0px;border-right:0px;border-bottom:0px;border-left:0px;" border="0" alt="image" src="http://s3.51cto.com/wyfs02/M02/8B/A7/wKiom1hTq82hj5qjAABURhBNFbA898.png" height="229" />

tag:Python 系統版本,Windows 組建,Python操作註冊表

--end--

本文出自 “通訊,我的最愛” 部落格,請務必保留此出處http://dgd2010.blog.51cto.com/1539422/1883428

利用Python指令碼擷取Windows和Linux的系統版本資訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.