我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python获取Linux或Window

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python获取Linux或Window

    前段时间写了一篇博文名为《利用Python脚本获取Windows和Linux的系统版本信息》,本篇博文利用这篇文章中的知识提供一个增强版本的获取信息的Python脚本。执行后,看起来就像登录Ubuntu Linux系统时提示的motd信息一样,可以看到:

  1. 系统的类型、发行版本(具体信息)、内核版本等

  2. 当前系统的时间、时区

  3. 系统每一个CPU核心的负载和CPU整体负载

  4. 进程数量

  5. 根分区的磁盘空间,Windows下默认C盘

  6. 登录的用户总数和每一个登录到系统的用户的信息

  7. 内存和交换分区的利用率

  8. 默认网卡的IP地址

  9. 系统启动时间和已运行时间

运行截图如下:

(1)Linux下截图:

wKiom1h3O5PC0kNHAAST-VfrqOQ700.jpg-wh_50

(2)Windows下截图:

wKiom1h3O5TTnWReAAFqVnYsZjA784.jpg-wh_50

Python代码如下:

#!/usr/bin/python
# encoding: utf-8
# -*- coding: utf8 -*-
"""
Created by PyCharm.
File:               LinuxBashShellScriptForOps:getSystemStatus.py
User:               Guodong
Create Date:        2016/8/18
Create Time:        15:32
 """
import platform
import psutil
import subprocess
import os
import sys
import time
import re
import prettytable

mswindows = (sys.platform == "win32")  # learning from 'subprocess' module
linux = (sys.platform == "linux2")


def getLocalIP():
    import netifaces
    routingNicName = netifaces.gateways()['default'][netifaces.AF_INET][1]
    for interface in netifaces.interfaces():
        if interface == routingNicName:
            try:
                routingIPAddr = netifaces.ifaddresses(interface)[netifaces.AF_INET][0]['addr']
                return interface, routingIPAddr
            except KeyError:
                pass


def getUser():
    if linux:
        proc_obj = subprocess.Popen(r'tty', shell=True, stdout=subprocess.PIPE,
                                    stderr=subprocess.STDOUT)
        tty = proc_obj.communicate()[0]
    else:
        tty = []

    user_object = psutil.users()

    for login in user_object:
        username, login_tty, login_host, login_time = [suser for suser in login]
        print username, login_tty, login_host, time.strftime('%b %d %H:%M:%S', time.localtime(login_time)),
        if login_tty in tty:
            print '**current user**'
        else:
            print


def getTimeZone():
    return time.strftime("%Z", time.gmtime())


def getTimeNow():
    now = time.strftime('%a %b %d %H:%M:%S %Y %Z', time.localtime(time.time()))
    return now


def printHeader():
    if linux:
        try:
            with open('/etc/issue') as f:
                content = f.read().strip()
                output_list = re.split(r' \\', content)
                linux_type = list(output_list)[0]
        except IOError:
            pass
        else:
            if linux_type is not None:
                return "Welcome to %s (%s %s %s)\n  System information as of %s" % (
                    linux_type, platform.system(), platform.release(), platform.machine(), getTimeNow()
                )
            else:
                return
    if mswindows:
        def get_system_encoding():
            import codecs
            import locale
            """
            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()

        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
                BuildLabEx = _winreg.QueryValueEx(reg_key, "BuildLabEx")[0][:9] or None
                return "%s, %s [%s]\r\nVersion %s (OS Internal Version %s)" % (
                    ProductName, EditionId, platform.version(), ReleaseId, BuildLabEx)
        except Exception as e:
            print e.message.decode(DEFAULT_LOCALE_ENCODING)


def getHostname():
    return platform.node()


def getCPU():
    return [x / 100.0 for x in psutil.cpu_percent(interval=0, percpu=True)]


def getLoadAverage():
    if linux:
        import multiprocessing
        k = 1.0
        k /= multiprocessing.cpu_count()
        if os.path.exists('/proc/loadavg'):
            return [float(open('/proc/loadavg').read().split()[x]) * k for x in range(3)]
        else:
            tokens = subprocess.check_output(['uptime']).split()
            return [float(x.strip(',')) * k for x in tokens[-3:]]
    if mswindows:
        # print psutil.cpu_percent()
        # print psutil.cpu_times_percent()
        # print psutil.cpu_times()
        # print psutil.cpu_stats()
        return "%.2f%%" % psutil.cpu_percent()


def getMemory():
    v = psutil.virtual_memory()
    return {
        'used': v.total - v.available,
        'free': v.available,
        'total': v.total,
        'percent': v.percent,
    }


def getVirtualMemory():
    v = psutil.swap_memory()
    return {
        'used': v.used,
        'free': v.free,
        'total': v.total,
        'percent': v.percent
    }


def getUptime():
    uptime_file = "/proc/uptime"
    if os.path.exists(uptime_file):
        with open(uptime_file, 'r') as f:
            return f.read().split(' ')[0].strip("\n")
    else:
        return time.time() - psutil.boot_time()


def getUptime2():
    boot_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(psutil.boot_time()))
    print "system start at: %s" % boot_time,
    uptime_total_seconds = time.time() - psutil.boot_time()
    uptime_days = int(uptime_total_seconds / 24 / 60 / 60)
    uptime_hours = int(uptime_total_seconds / 60 / 60 % 24)
    uptime_minutes = int(uptime_total_seconds / 60 % 60)
    uptime_seconds = int(uptime_total_seconds % 60)
    print "uptime: %d days %d hours %d minutes %d seconds" % (uptime_days, uptime_hours, uptime_minutes, uptime_seconds)

    user_number = len(psutil.users())
    print "%d user:" % user_number
    print "  \\"
    for user_tuple in psutil.users():
        user_name = user_tuple[0]
        user_terminal = user_tuple[1]
        user_host = user_tuple[2]
        user_login_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(user_tuple[3]))
        print "  |- user online: %s, login from %s with terminal %s at %s" % (
            user_name, user_host, user_terminal, user_login_time)

    cpu_count = psutil.cpu_count()
    try:
        with open('/proc/loadavg', 'r') as f:
            loadavg_c = f.read().split(' ')
            loadavg = dict()
            if loadavg_c is not None:
                loadavg['lavg_1'] = loadavg_c[0]
                loadavg['lavg_5'] = loadavg_c[1]
                loadavg['lavg_15'] = loadavg_c[2]
                loadavg['nr'] = loadavg_c[3]
                loadavg['last_pid'] = loadavg_c[4]
        print "load average: %s, %s, %s" % (loadavg['lavg_1'], loadavg['lavg_5'], loadavg['lavg_15'])
        if float(loadavg['lavg_15']) > cpu_count:
            print "Note: cpu 15 min load is high!"
        if float(loadavg['lavg_5']) > cpu_count:
            print "Note: cpu 5 min load is high!"
        if float(loadavg['lavg_1']) > cpu_count:
            print "Note: cpu 1 min load is high!"
    except IOError:
        pass


if __name__ == '__main__':
    header = printHeader()
    print header
    print

    system_load = str(getLoadAverage()).strip("[]")
    user_logged_in = len(psutil.users())
    info_of_root_partition = psutil.disk_usage("/")
    percent_of_root_partition_usage = "%.2f%%" % (
        float(info_of_root_partition.used) * 100 / float(info_of_root_partition.total))
    total_size_of_root_partition = "%.2f" % (float(psutil.disk_usage("/").total / 1024) / 1024 / 1024)
    memory_info = getMemory()
    memory_usage = "%.2f%%" % (float(memory_info['used']) * 100 / float(memory_info['total']))
    swap_info = getVirtualMemory()
    swap_usage = "%.2f%%" % (float(swap_info['used']) * 100 / float(swap_info['total']))
    local_ip_address = getLocalIP()

    table = prettytable.PrettyTable(border=False, header=False, left_padding_width=2)
    table.field_names = ["key1", "value1", "key2", "value2"]
    table.add_row(["System load:", system_load, "Processes:", len(list(psutil.process_iter()))])
    table.add_row(["Usage of /:", "%s of %sGB" % (percent_of_root_partition_usage, total_size_of_root_partition),
                   "Users logged in:", user_logged_in])
    table.add_row(["Memory usage:", memory_usage, "IP address for %s:" % local_ip_address[0], local_ip_address[1]])
    table.add_row(["Swap usage:", swap_usage, "", ""])
    for field in table.field_names:
        table.align[field] = "l"

    print table.get_string()
    print
    getUser()
    print
    getUptime2()


注:脚本内容可以通过GitHub获取,https://github.com/DingGuodong/LinuxBashShellScriptForOps/blob/master/functions/system/getSystemStatus.py,欢迎star、fork。

已知存在问题:

  1. 暂时未实现获取Windows下网卡的中文可视名称

  2. Windows下的tty名称默认为None,暂时没有设置对用户友好的显示

  3. Ubuntu Linux上motd信息的用户登录数量显示为同一用户同一个IP的多个用户视为同一用户,脚本中视为不同用户

  4. 首次运行可能需要安装依赖的地方库,如psutil、platform、prettytable、netifaces等,请使用easy_install、pip、conda等安装。

  5. 其他的因为时间原因未指出和未实现的问题,欢迎在文章下面评论留言和在GitHub上提issue

tag:Python、Linux系统信息、Windows系统信息

--end--

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python获取Linux或Window

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python获取Linux或Window

前段时间写了一篇博文名为《利用Python脚本获取Windows和Linux的系统版本信息》,本篇博文利用这篇文章中的知识提供一个增强版本的获取信息的Python脚本。执行后,看起来就像登录Ubuntu Linux系统时提示的motd信息一
2023-01-31

python获取Linux信息

刚开始学习Python,用Python写了一个获取Linux服务器信息的脚本,在debian和centos上测试通过。首先需要安装一个psutil库,在安装psutil之前需要安装python的开发工具包#debian  apt-get i
2023-01-31

python获取linux中top信息

import os,time,sysimport paramiko,pexpect获取日期格式:def get_year_mon_day_hour_min_sec(): time_array = time.localtime()
2023-01-31

python 获取Linux主机名和IP

>>> import socket>>> name = socket.gethostname()>>> print name***-***-***-**>>> ip_addr = socket.gethostbyname(name)>>>
2023-01-31

python获取linux的系统信息

python写的抓取linux系统主要信息的脚本,主要就是内存,硬盘、CPU之类的信息。 内存信息 / meminfo 返回dict #!/usr/bin/env python def memory_stat():     mem = {}
2023-01-31

python获取Linux发行版名称

我必须从python脚本中获取linux发行版名称。dist平台模块中有一个方法:import platform platform.dist()但在我的Arch Linux下它返回:>>> platform.dist() ('',
2022-06-04

从日期获取年,月或日

参考: DECLARE @D DATETIME = GETDATE()SELECT DATEPART(YEAR,@D) AS [YEAR], DATEPART(MONTH,@D) AS [MONTH], DATEPART(DAY,@D) AS [DAY] SE
从日期获取年,月或日
2016-07-03

python 获取Linux和Windows硬件信息

linux获取linux硬件信息的方式,有很多。1.使用puppet或者saltstack2.直接读取/proc/xx文件,比如cpu信息,就是/proc/cpuinfo3.dmidecode4.psutil,它可以获取某些信息,但是对于C
2023-01-30

python获取sessionid

获取sessionid代码如下:  1 #!/usr/bin/env python  2   3 import cookielib  4 from urllib2 import Request,build_opener, HTTPCooki
2023-01-31

Python的len()函数:获取列表或字符串的长度

Python的len()函数:获取列表或字符串的长度,需要具体代码示例一、介绍在Python编程中,len()函数是一个非常常用的内建函数,用于获取列表、元组、字符串等数据类型的长度。这个函数非常简单和方便,可以帮助我们更加高效地处理数据。
Python的len()函数:获取列表或字符串的长度
2023-11-18

如何在Linux 中获取硬盘分区或文件系统的UUID

本篇文章为大家展示了如何在Linux 中获取硬盘分区或文件系统的UUID,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。作为一个 Linux 系统管理员,你应该知道如何去查看分区的 UUID 或文件系
2023-06-05

linux中怎么通过date命令获取昨天或明天时间

这篇文章主要讲解了“linux中怎么通过date命令获取昨天或明天时间”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“linux中怎么通过date命令获取昨天或明天时间”吧!例如:代码如下:d
2023-06-13

Python正则获取、过滤或者替换HTML标签的方法

本文实例介绍了Python通过正则表达式获取,去除(过滤)或者替换HTML标签的几种方法,具体内容如下 python正则表达式关键内容: python正则表达式转义符:. 匹配除换行符以外的任意字符 w 匹配字母或数字或下划线或汉字 s 匹
2022-06-04

python 获取subprocess实

import subprocessp = subprocess.Popen("ping www.baidu.com -n 6",shell=True,stdout=subprocess.PIPE)#一下面是第一种方法(使用时请先注释第二种方
2023-01-31

Android adb命令获取当前Activity或者Fragment

用adb命令查看下面Demo处于NO.3 Fragment时的Activity和Fragment信息。 查看当前Activity及其包名 adb shell "dumpsys window | grep mCurrentFocus" 输出
2023-08-19

pandas获取对应的行或者列方式

pandas提供了获取特定行或列的多种方法。通过索引值可使用索引器、.loc[]或.iloc[]获取特定行。特定列可通过列名、.loc[]或.iloc[]获取。可使用列表或切片获取多个行或列,也可使用布尔索引根据条件过滤。其他方法包括获取开头或结尾行(.head()和.tail())、随机抽取行(.sample())以及使用SQL语法过滤(.query())。这些方法可灵活地获取pandas数据框中的特定行或列数据。
pandas获取对应的行或者列方式
2024-04-02

如何获取Linux环境

这篇文章主要讲解了“如何获取Linux环境”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何获取Linux环境”吧!2.1 获得Linux环境的三种方式学习Linux,必须先获得一个Linu
2023-06-13

python获取linux系统信息的三种方法

方法一:psutil模块#!usr/bin/env python # -*- coding: utf-8 -*-import socket import psutil class NodeResource(object):def get_h
2022-06-04

Linux下怎么获取UUID

这篇文章主要讲解了“Linux下怎么获取UUID”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux下怎么获取UUID”吧!如何通过C++编程取得UUID? 1.安装libuuid库,
2023-06-13

编程热搜

目录