python远程连接服务器获取服务器状态

2023-10-26


前言

因为近期思考自定义绘制服务器状态监控界面,不能在被监控服务器搭建服务,所以考虑通过python远程连接服务器执行相关命令获取服务器状态


关于服务器执行命令可以参考我的另外一篇文章,Linux常用命令

一、python远程连接服务器

第一步是思考怎么采用python连接远程服务器,这里采用的是paramiko模块:

ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography)。
paramiko包含两个核心组件:SSHClient和SFTPClient。
SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。
SFTPClient的作用类似与Linux的sftp命令,是对SFTP客户端的封装,用以实现远程文件操作,如文件上传、下载、修改文件权限等操作。

有了Paramiko以后,我们就可以在Python代码中直接使用SSH协议对远程服务器执行操作,而不是通过ssh命令对远程服务器进行操作。

1.由于paramiko属于第三方库,所以需要使用如下命令先行安装

pip install paramiko

2.SSHClient常用的方法介绍

connect():实现远程服务器的连接与认证,对于该方法只有hostname是必传参数。

常用参数
hostname 连接的目标主机
port=SSH_PORT 指定端口
username=None 验证的用户名
password=None 验证的用户密码
pkey=None 私钥方式用于身份验证
key_filename=None 一个文件名或文件列表,指定私钥文件
timeout=None 可选的tcp连接超时时间
allow_agent=True, 是否允许连接到ssh代理,默认为True 允许
look_for_keys=True 是否在~/.ssh中搜索私钥文件,默认为True 允许
compress=False, 是否打开压缩

set_missing_host_key_policy():设置远程服务器没有在know_hosts文件中记录时的应对策略。目前支持三种策略:

设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种:
AutoAddPolicy 自动添加主机名及主机密钥到本地HostKeys对象,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认
WarningPolicy 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接
RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项

exec_command():在远程服务器执行Linux命令的方法。
open_sftp():在当前ssh会话的基础上创建一个sftp会话。该方法会返回一个SFTPClient对象。

利用SSHClient对象的open_sftp()方法,可以直接返回一个基于当前连接的sftp对象,可以进行文件的上传等操作.
sftp = client.open_sftp()
sftp.put(‘test.txt’,‘text.txt’)

3.基本使用

import paramiko
#实例化SSHClient
client = paramiko.SSHClient()
# 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接SSH服务端,以用户名和密码进行认证
client.connect(hostname='10.8.250.71', port=22, username='tboss', password='123456')
# 打开一个Channel并执行命令
stdin, stdout, stderr = client.exec_command('df -h ')  # stdout 为正确输出,stderr为错误输出,同时是有1个变量有值
# 打印执行结果
print(stdout.read().decode('utf-8'))
# 使用stdout.readlines()则直接返回list
print(stdout.readlines())

密钥连接方式参考:

# 配置私人密钥文件位置
private = paramiko.RSAKey.from_private_key_file('/Users/ch/.ssh/id_rsa')
#实例化SSHClient
client = paramiko.SSHClient()
#自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接SSH服务端,以用户名和密码进行认证
client.connect(hostname='10.0.0.1',port=22,username='root',pkey=private)

二、结合linux命令查看服务器状态

查看对应的linux命令返回值,通过返回值实现服务器监控

代码如下(示例):

import paramiko

import re,time

class moniter():
def init(self, ip=‘10.8.250.01’, port=22, name=‘user’, pwd=‘123456’):
self.ip = ip
self.port = port
self.name = name
self.pwd = pwd
# 建立ssh连接
self.client = paramiko.SSHClient()
self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.client.connect(self.ip, self.port, self.name, self.pwd)

"""
内存监控
"""

def mem_info(self):
    stdout = self.client.exec_command("cat /proc/meminfo", )[1]
    content = stdout.readlines()
    mems={}
    for line in content:
        fields = line.split()
        mems[fields[0]] = int(fields[1]) * 1024
    MemTotal = mems['MemTotal:']
    MemFree = mems['MemFree:']
    Buffers = mems['Buffers:']
    Cached = mems['Cached:']
    SwapCached = mems['SwapCached:']
    SwapTotal = mems['SwapTotal:']
    SwapFree = mems['SwapFree:']
    print('******************************内存监控*********************************')
    print("*******************时间:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************")
    print("总内存:", MemTotal)
    print("空闲内存:", MemFree)
    print("给文件的缓冲大小:", Buffers)
    print("高速缓冲存储器使用的大小:", Cached)
    print("被高速缓冲存储用的交换空间大小:", SwapCached)
    print("给文件的缓冲大小:", Buffers)
    if int(SwapTotal) == 0:
        print(u"交换内存总共为:0")

    else:
        Rate_Swap = 100 - 100 * int(SwapFree) / float(SwapTotal)
        print(u"交换内存利用率:", Rate_Swap)
    Free_Mem = int(MemFree) + int(Buffers) + int(Cached)
    Used_Mem = int(MemTotal) - Free_Mem
    Rate_Mem = 100 * Used_Mem / float(MemTotal)
    print(u"内存利用率:", str("%.2f" % Rate_Mem), "%")

"""
内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息
"""

def vm_stat_info(self):
    '''
    vmstat 1 1 | tail -n 1 的返回值按照顺序排序
    r:等待执行的任务数.展示了正在执行和等待cpu资源的任务个数。当这个值超过了cpu个数,就会出现cpu瓶颈。
    b: 等待IO的进程数量
    swpd: 正在使用虚拟的内存大小,单位k
    free: 空闲内存大小,单位k
    buff: 已用的buff大小,对块设备的读写进行缓冲
    cache: 已用的cache大小,文件系统的cache
    si: 每秒从交换区写入内存的大小(单位:kb/s)
    so: 每秒从内存写到交换区的大小
    bi: 每秒读取的块数(读磁盘)
    bo: 每秒写入的块数(写磁盘)
    in: 每秒中断数,包括时钟中断
    cs: 每秒上下文切换数
    us: 用户进程执行消耗cpu时间(user time)
    sy: 系统进程消耗cpu时间(system time)
    id: 空闲时间(包括IO等待时间)
    wa: 等待IO时间
    st: 虚拟机占用的时间百分比,一般不关注
    '''
    stdout = self.client.exec_command("vmstat 1 1 | tail -n 1", )[1]
    content = stdout.readlines()
    fields = content[0].split()
    processes_waiting = fields[0]
    processes_sleep = fields[1]
    swpd = fields[2]
    free = fields[3]
    buff = fields[4]
    cache = fields[5]
    si = fields[6]
    so = fields[7]
    io_bi = fields[8]
    io_bo = fields[9]
    system_interrupt = fields[10]
    system_context_switch = fields[11]
    cpu_user = fields[12]
    cpu_sys = fields[13]
    cpu_idle = fields[14]
    cpu_wait = fields[15]
    st = fields[16]
    print('****************************内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息监控****************************')
    print("*******************时间:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************")
    print("等待运行进程的数量:", processes_waiting)
    print("处于不间断状态的进程:", processes_sleep)
    print("使用虚拟内存(swap)的总量:", swpd)
    print("空闲的内存总量:", free)
    print("用作缓冲的内存总量:", buff)
    print("用作缓存的内存总量:", cache)
    print("交换出内存总量 :", si)
    print("交换入内存总量 :", so)
    print("从一个块设备接收:", io_bi)
    print("发送到块设备:", io_bo)
    print("每秒的中断数:", system_interrupt)
    print("每秒的上下文切换数:", system_context_switch)
    print("用户空间上进程运行的时间百分比:", cpu_user)
    print("内核空间上进程运行的时间百分比:", cpu_sys)
    print("闲置时间百分比:", cpu_idle)
    print("等待IO的时间百分比:", cpu_wait)
    print("从虚拟机偷取的时间百分比:", st)

'''
cpu监控
'''

def cpu_info(self):
    '''
    cat /proc/cpuinfo 详解
    processor: 处理器
    vendor_id :CPU制造商
    cpu family :CPU产品系列代号
    model   :CPU属于其系列中的哪一代的代号
    model name:CPU属于的名字及其编号、标称主频
    stepping   :CPU属于制作更新版本
    cpu MHz   :CPU的实际使用主频
    cache size   :CPU二级缓存大小
    physical id   :单个CPU的标号
    siblings      :单个CPU逻辑物理核数
    core id      :当前物理核在其所处CPU中的编号,这个编号不一定连续.
    cpu cores   :该逻辑核所处CPU的物理核数
    apicid        :用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续.
    fpu           :是否具有浮点运算单元(Floating Point Unit)
    fpu_exception  :是否支持浮点计算异常
    cpuid level  :执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容.
    wp           :表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)
    flags         :当前CPU支持的功能
    bogomips   :在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
    clflush size  :每次刷新缓存的大小单位
    cache_alignment :缓存地址对齐单位
    address sizes    :可访问地址空间位数
    power management :对能源管理的支持
    '''
    stdout = self.client.exec_command("cat /proc/cpuinfo", )[1]
    content = stdout.readlines()
    print('***************************************cpu监控***************************************')
    print("*******************时间:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************")
    temporary = {}
    cpuinfoiList = []
    for it in content :
        if it=='\n':
            cpuinfoiList.append(temporary)
            temporary={}
        else:
            it = it.replace('\t','').replace('\n','')
            temporary[it.split(':')[0]] = it.split(':')[1]
    for CPUinfo in cpuinfoiList:
        print("CPU属于的编号:", CPUinfo['processor'])
        print("CPU制造商:", CPUinfo['vendor_id'])
        print("CPU产品系列代号:", CPUinfo['cpu family'])
        print("CPU属于其系列中的哪一代的代号:", CPUinfo['model'])
        print("CPU属于的名字及其编号、标称主频:", CPUinfo['model name'])
        print("CPU属于制作更新版本:", CPUinfo['stepping'])
        print("CPU的实际使用主频:", CPUinfo['cpu MHz'])
        print("CPU二级缓存大小:", CPUinfo['cache size'])
        print("单个CPU的标号:", CPUinfo['physical id'])
        print("单个CPU逻辑物理核数:", CPUinfo['siblings'])
        print("当前物理核在其所处CPU中的编号,这个编号不一定连续.:", CPUinfo['core id'])
        print("该逻辑核所处CPU的物理核数:", CPUinfo['cpu cores'])
        print("用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续:", CPUinfo['apicid'])
        print("是否具有浮点运算单元(Floating Point Unit):", CPUinfo['fpu'])
        print("是否支持浮点计算异常:", CPUinfo['fpu_exception'])
        print("执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容.:", CPUinfo['cpuid level'])
        print("表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection):", CPUinfo['wp'])
        print("当前CPU支持的功能:", CPUinfo['flags'])
        print("在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second):", CPUinfo['bogomips'])
        print("每次刷新缓存的大小单位:", CPUinfo['clflush size'])
        print("缓存地址对齐单位:", CPUinfo['cache_alignment'])
        print("可访问地址空间位数:", CPUinfo['address sizes'])
        print("对能源管理的支持:", CPUinfo['power management'])
"""
负载均衡
"""


def load_stat(self):
    stdout = self.client.exec_command("cat /proc/loadavg", )[1]
    content = stdout.readlines()
    loadavgs = content[0].strip().split()
    print('************************负载均衡监控****************************')
    print('"*******************时间:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************"')
    print("系统5分钟前的平均负载:", loadavgs[0])
    print("系统10分钟前的平均负载:", loadavgs[1])
    print("系统15分钟前的平均负载:", loadavgs[2])
    print("分子是正在运行的进程数,分母为总进程数:", loadavgs[3])
    print("最近运行的进程id:", loadavgs[4])

"""
获取网络接口的输入和输出
"""


def ionetwork(self):
    stdout = self.client.exec_command("cat /proc/net/dev", )[1]
    content = stdout.readlines()
    print('************************获取网络接口的输入和输出监控****************************')
    print("*******************时间:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************")
    net = {}
    for line in content[2:]:
        line = line.strip().split(":")
        eth_name = line[0].strip()
        net_io = {}
        net_io['Receive(收包的字节数)'] = round(float(line[1].split()[0]) / (1024.0 * 1024.0), 2)
        net_io['packets(收包正确的包量)'] = round(float(line[1].split()[1]) / (1024.0 * 1024.0), 2)
        net_io['errs(收包错误的包量)'] = round(float(line[1].split()[2]) / (1024.0 * 1024.0), 2)
        net_io['drop(收包丢弃的包量)'] = round(float(line[1].split()[3]) / (1024.0 * 1024.0), 2)
        net_io['Transmit(发包的字节数)'] = round(float(line[1].split()[8]) / (1024.0 * 1024.0), 2)
        net_io['packets(发包正确的包量)'] = round(float(line[1].split()[9]) / (1024.0 * 1024.0), 2)
        net_io['errs(发包错误的包量)'] = round(float(line[1].split()[10]) / (1024.0 * 1024.0), 2)
        net_io['drop(发包丢弃的包量)'] = round(float(line[1].split()[11]) / (1024.0 * 1024.0), 2)
        net[eth_name] = net_io
    for it in net.items():
        print(it)

""" 
磁盘空间监控
"""

def disk_stat(self):
    stdout = self.client.exec_command("df -h", )[1]
    content = stdout.readlines()
    print('************************磁盘空间监控****************************')

    print("*******************时间:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************")

    for i in content[1:]:
        i = i.replace('\n','').split()
        print("\t文件系统:", i[0],)
        print("\t容量:", i[1],)
        print("\t已用:", i[2],)
        print("\t可用:", i[3],)
        print("\t已用%挂载点:", i[4])

""" 
端口监控
一般是远程服务器用户名用户
"""

def getComStr(self):
    stdout = self.client.exec_command("netstat -tpln", )[1]
    content = stdout.readlines()
    print('content', content)
    print('******************************端口监控*********************************')
    print("*******************时间:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), "******************")
    for i in content[1:]:
        i = i.replace('\n', '').split()
        print('Proto:',i[0])
        print('Recv-Q:',i[1])
        print('Send-Q:',i[2])
        print('Local Address:',i[3])
        print('Foreign Address:',i[4])
        print('State:',i[5])
        print(' PID/Program name:',i[6])

moniter().mem_info()
moniter().vm_stat_info()
moniter().cpu_info()
moniter().load_stat()
moniter().ionetwork()
moniter().disk_stat()
moniter().getComStr()

运行结果

内存监控***
*******************时间: 2021-06-09 16:07:32 ******************
总内存: 33730478080
空闲内存: 30524903424
给文件的缓冲大小: 327045120
高速缓冲存储器使用的大小: 1392988160
被高速缓冲存储用的交换空间大小: 0
给文件的缓冲大小: 327045120
交换内存利用率: 0.0
内存利用率: 4.40 %
内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息监控
*******************时间: 2021-06-09 16:07:33 ******************
等待运行进程的数量: 0
处于不间断状态的进程: 0
使用虚拟内存(swap)的总量: 0
空闲的内存总量: 29808196
用作缓冲的内存总量: 319380
用作缓存的内存总量: 1579588
交换出内存总量 : 0
交换入内存总量 : 0
从一个块设备接收: 0
发送到块设备: 1
每秒的中断数: 2
每秒的上下文切换数: 2
用户空间上进程运行的时间百分比: 0
内核空间上进程运行的时间百分比: 0
闲置时间百分比: 100
等待IO的时间百分比: 0
从虚拟机偷取的时间百分比: 0
cpu监控
************时间: 2021-06-09 16:07:34 ******************
CPU属于的编号: 0
CPU制造商: GenuineIntel
CPU产品系列代号: 6
CPU属于其系列中的哪一代的代号: 63
CPU属于的名字及其编号、标称主频: Intel® Xeon® CPU E5-2680 v3 @ 2.50GHz
CPU属于制作更新版本: 2
CPU的实际使用主频: 2499.998
CPU二级缓存大小: 30720 KB
单个CPU的标号: 0
单个CPU逻辑物理核数: 1
当前物理核在其所处CPU中的编号,这个编号不一定连续.: 0
该逻辑核所处CPU的物理核数: 1
用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续: 0
是否具有浮点运算单元(Floating Point Unit): yes
是否支持浮点计算异常: yes
执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容.: 15
表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection): yes
当前CPU支持的功能: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault invpcid_single pti ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt arat arch_capabilities
在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second): 4999.99
每次刷新缓存的大小单位: 64
缓存地址对齐单位: 64
可访问地址空间位数: 43 bits physical, 48 bits virtual
对能源管理的支持:
CPU属于的编号: 1
CPU制造商: GenuineIntel
CPU产品系列代号: 6
CPU属于其系列中的哪一代的代号: 63
CPU属于的名字及其编号、标称主频: Intel® Xeon® CPU E5-2680 v3 @ 2.50GHz
CPU属于制作更新版本: 2
CPU的实际使用主频: 2499.998
CPU二级缓存大小: 30720 KB
单个CPU的标号: 2
单个CPU逻辑物理核数: 1
当前物理核在其所处CPU中的编号,这个编号不一定连续.: 0
该逻辑核所处CPU的物理核数: 1
用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续: 2
是否具有浮点运算单元(Floating Point Unit): yes
是否支持浮点计算异常: yes
执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容.: 15
表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection): yes
当前CPU支持的功能: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault invpcid_single pti ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt arat arch_capabilities
在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second): 4999.99
每次刷新缓存的大小单位: 64
缓存地址对齐单位: 64
可访问地址空间位数: 43 bits physical, 48 bits virtual
对能源管理的支持:
CPU属于的编号: 2
CPU制造商: GenuineIntel
CPU产品系列代号: 6
CPU属于其系列中的哪一代的代号: 63
CPU属于的名字及其编号、标称主频: Intel® Xeon® CPU E5-2680 v3 @ 2.50GHz
CPU属于制作更新版本: 2
CPU的实际使用主频: 2499.998
CPU二级缓存大小: 30720 KB
单个CPU的标号: 4
单个CPU逻辑物理核数: 1
当前物理核在其所处CPU中的编号,这个编号不一定连续.: 0
该逻辑核所处CPU的物理核数: 1
用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续: 4
是否具有浮点运算单元(Floating Point Unit): yes
是否支持浮点计算异常: yes
执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容.: 15
表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection): yes
当前CPU支持的功能: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault invpcid_single pti ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt arat arch_capabilities
在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second): 4999.99
每次刷新缓存的大小单位: 64
缓存地址对齐单位: 64
可访问地址空间位数: 43 bits physical, 48 bits virtual
对能源管理的支持:
CPU属于的编号: 3
CPU制造商: GenuineIntel
CPU产品系列代号: 6
CPU属于其系列中的哪一代的代号: 63
CPU属于的名字及其编号、标称主频: Intel® Xeon® CPU E5-2680 v3 @ 2.50GHz
CPU属于制作更新版本: 2
CPU的实际使用主频: 2499.998
CPU二级缓存大小: 30720 KB
单个CPU的标号: 6
单个CPU逻辑物理核数: 1
当前物理核在其所处CPU中的编号,这个编号不一定连续.: 0
该逻辑核所处CPU的物理核数: 1
用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续: 6
是否具有浮点运算单元(Floating Point Unit): yes
是否支持浮点计算异常: yes
执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容.: 15
表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection): yes
当前CPU支持的功能: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault invpcid_single pti ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt arat arch_capabilities
在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second): 4999.99
每次刷新缓存的大小单位: 64
缓存地址对齐单位: 64
可访问地址空间位数: 43 bits physical, 48 bits virtual
对能源管理的支持:
CPU属于的编号: 4
CPU制造商: GenuineIntel
CPU产品系列代号: 6
CPU属于其系列中的哪一代的代号: 63
CPU属于的名字及其编号、标称主频: Intel® Xeon® CPU E5-2680 v3 @ 2.50GHz
CPU属于制作更新版本: 2
CPU的实际使用主频: 2499.998
CPU二级缓存大小: 30720 KB
单个CPU的标号: 8
单个CPU逻辑物理核数: 1
当前物理核在其所处CPU中的编号,这个编号不一定连续.: 0
该逻辑核所处CPU的物理核数: 1
用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续: 8
是否具有浮点运算单元(Floating Point Unit): yes
是否支持浮点计算异常: yes
执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容.: 15
表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection): yes
当前CPU支持的功能: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault invpcid_single pti ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt arat arch_capabilities
在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second): 4999.99
每次刷新缓存的大小单位: 64
缓存地址对齐单位: 64
可访问地址空间位数: 43 bits physical, 48 bits virtual
对能源管理的支持:
CPU属于的编号: 5
CPU制造商: GenuineIntel
CPU产品系列代号: 6
CPU属于其系列中的哪一代的代号: 63
CPU属于的名字及其编号、标称主频: Intel® Xeon® CPU E5-2680 v3 @ 2.50GHz
CPU属于制作更新版本: 2
CPU的实际使用主频: 2499.998
CPU二级缓存大小: 30720 KB
单个CPU的标号: 10
单个CPU逻辑物理核数: 1
当前物理核在其所处CPU中的编号,这个编号不一定连续.: 0
该逻辑核所处CPU的物理核数: 1
用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续: 10
是否具有浮点运算单元(Floating Point Unit): yes
是否支持浮点计算异常: yes
执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容.: 15
表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection): yes
当前CPU支持的功能: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault invpcid_single pti ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt arat arch_capabilities
在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second): 4999.99
每次刷新缓存的大小单位: 64
缓存地址对齐单位: 64
可访问地址空间位数: 43 bits physical, 48 bits virtual
对能源管理的支持:
CPU属于的编号: 6
CPU制造商: GenuineIntel
CPU产品系列代号: 6
CPU属于其系列中的哪一代的代号: 63
CPU属于的名字及其编号、标称主频: Intel® Xeon® CPU E5-2680 v3 @ 2.50GHz
CPU属于制作更新版本: 2
CPU的实际使用主频: 2499.998
CPU二级缓存大小: 30720 KB
单个CPU的标号: 12
单个CPU逻辑物理核数: 1
当前物理核在其所处CPU中的编号,这个编号不一定连续.: 0
该逻辑核所处CPU的物理核数: 1
用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续: 12
是否具有浮点运算单元(Floating Point Unit): yes
是否支持浮点计算异常: yes
执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容.: 15
表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection): yes
当前CPU支持的功能: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault invpcid_single pti ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt arat arch_capabilities
在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second): 4999.99
每次刷新缓存的大小单位: 64
缓存地址对齐单位: 64
可访问地址空间位数: 43 bits physical, 48 bits virtual
对能源管理的支持:
CPU属于的编号: 7
CPU制造商: GenuineIntel
CPU产品系列代号: 6
CPU属于其系列中的哪一代的代号: 63
CPU属于的名字及其编号、标称主频: Intel® Xeon® CPU E5-2680 v3 @ 2.50GHz
CPU属于制作更新版本: 2
CPU的实际使用主频: 2499.998
CPU二级缓存大小: 30720 KB
单个CPU的标号: 14
单个CPU逻辑物理核数: 1
当前物理核在其所处CPU中的编号,这个编号不一定连续.: 0
该逻辑核所处CPU的物理核数: 1
用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续: 14
是否具有浮点运算单元(Floating Point Unit): yes
是否支持浮点计算异常: yes
执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容.: 15
表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection): yes
当前CPU支持的功能: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm cpuid_fault invpcid_single pti ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 invpcid xsaveopt arat arch_capabilities
在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second): 4999.99
每次刷新缓存的大小单位: 64
缓存地址对齐单位: 64
可访问地址空间位数: 43 bits physical, 48 bits virtual
对能源管理的支持:
负载均衡监控

"时间:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), ""
系统5分钟前的平均负载: 0.01
系统10分钟前的平均负载: 0.02
系统15分钟前的平均负载: 0.00
分子是正在运行的进程数,分母为总进程数: 1/421
最近运行的进程id: 20825
获取网络接口的输入和输出监控

***************时间: 2021-06-09 16:07:35 ******************
(‘ens160’, {‘Receive(收包的字节数)’: 546.54, ‘packets(收包正确的包量)’: 3.4, ‘errs(收包错误的包量)’: 0.0, ‘drop(收包丢弃的包量)’: 0.0, ‘Transmit(发包的字节数)’: 487.53, ‘packets(发包正确的包量)’: 0.72, ‘errs(发包错误的包量)’: 0.0, ‘drop(发包丢弃的包量)’: 0.0})
(‘vethaea249b’, {‘Receive(收包的字节数)’: 620.43, ‘packets(收包正确的包量)’: 3.15, ‘errs(收包错误的包量)’: 0.0, ‘drop(收包丢弃的包量)’: 0.0, ‘Transmit(发包的字节数)’: 654.3, ‘packets(发包正确的包量)’: 2.74, ‘errs(发包错误的包量)’: 0.0, ‘drop(发包丢弃的包量)’: 0.0})
(‘docker0’, {‘Receive(收包的字节数)’: 576.35, ‘packets(收包正确的包量)’: 3.15, ‘errs(收包错误的包量)’: 0.0, ‘drop(收包丢弃的包量)’: 0.0, ‘Transmit(发包的字节数)’: 654.28, ‘packets(发包正确的包量)’: 2.74, ‘errs(发包错误的包量)’: 0.0, ‘drop(发包丢弃的包量)’: 0.0})
(‘lo’, {‘Receive(收包的字节数)’: 1313.09, ‘packets(收包正确的包量)’: 7.38, ‘errs(收包错误的包量)’: 0.0, ‘drop(收包丢弃的包量)’: 0.0, ‘Transmit(发包的字节数)’: 1313.09, ‘packets(发包正确的包量)’: 7.38, ‘errs(发包错误的包量)’: 0.0, ‘drop(发包丢弃的包量)’: 0.0})
磁盘空间监控

**时间: 2021-06-09 16:07:36 ******************
文件系统: udev
容量: 16G
已用: 0
可用: 16G
已用%挂载点: 0%
文件系统: tmpfs
容量: 3.2G
已用: 1.1M
可用: 3.2G
已用%挂载点: 1%
文件系统: /dev/mapper/ubuntu–vg-ubuntu–lv
容量: 31G
已用: 13G
可用: 17G
已用%挂载点: 43%
文件系统: tmpfs
容量: 16G
已用: 4.0K
可用: 16G
已用%挂载点: 1%
文件系统: tmpfs
容量: 5.0M
已用: 0
可用: 5.0M
已用%挂载点: 0%
文件系统: tmpfs
容量: 16G
已用: 0
可用: 16G
已用%挂载点: 0%
文件系统: /dev/sda2
容量: 976M
已用: 148M
可用: 762M
已用%挂载点: 17%
文件系统: tmpfs
容量: 3.2G
已用: 0
可用: 3.2G
已用%挂载点: 0%
content [‘Active Internet connections (only servers)\n’, ‘Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name \n’, 'tcp 0 0 0.0.0.0:5557 0.0.0.0:
LISTEN 17186/python3 \n’, 'tcp 0 0 127.0.0.53:53 0.0.0.0:
LISTEN - \n’, 'tcp 0 0 0.0.0.0:22 0.0.0.0:
LISTEN - \n’, 'tcp 0 0 10.8.250.71:8089 0.0.0.0:
LISTEN 17186/python3 \n’, 'tcp 0 0 127.0.0.1:6010 0.0.0.0:
LISTEN - \n’, 'tcp 0 0 127.0.0.1:36539 0.0.0.0:
LISTEN - \n’, 'tcp 0 0 10.8.250.71:8000 0.0.0.0:
LISTEN - \n’, 'tcp 0 0 127.0.0.1:3306 0.0.0.0:
LISTEN - \n’, 'tcp 0 0 0.0.0.0:6379 0.0.0.0:
LISTEN - \n’, 'tcp 0 0 0.0.0.0:80 0.0.0.0:
LISTEN - \n’, 'tcp6 0 0 :::22 :::
LISTEN - \n’, 'tcp6 0 0 ::1:6010 :::
LISTEN - \n’, 'tcp6 0 0 :::4444 :::
LISTEN - \n’, 'tcp6 0 0 :::80 :::
LISTEN - \n’]
端口监控

*****时间: 2021-06-09 16:07:37 ******************
Proto: Proto
Recv-Q: Recv-Q
Send-Q: Send-Q
Local Address: Local
Foreign Address: Address
State: Foreign
PID/Program name: Address
Proto: tcp
Recv-Q: 0
Send-Q: 0
Local Address: 0.0.0.0:5557
Foreign Address: 0.0.0.0:

State: LISTEN
PID/Program name: 17186/python3
Proto: tcp
Recv-Q: 0
Send-Q: 0
Local Address: 127.0.0.53:53
Foreign Address: 0.0.0.0:

State: LISTEN
PID/Program name: -
Proto: tcp
Recv-Q: 0
Send-Q: 0
Local Address: 0.0.0.0:22
Foreign Address: 0.0.0.0:

State: LISTEN
PID/Program name: -
Proto: tcp
Recv-Q: 0
Send-Q: 0
Local Address: 10.8.250.71:8089
Foreign Address: 0.0.0.0:

State: LISTEN
PID/Program name: 17186/python3
Proto: tcp
Recv-Q: 0
Send-Q: 0
Local Address: 127.0.0.1:6010
Foreign Address: 0.0.0.0:

State: LISTEN
PID/Program name: -
Proto: tcp
Recv-Q: 0
Send-Q: 0
Local Address: 127.0.0.1:36539
Foreign Address: 0.0.0.0:

State: LISTEN
PID/Program name: -
Proto: tcp
Recv-Q: 0
Send-Q: 0
Local Address: 10.8.250.71:8000
Foreign Address: 0.0.0.0:

State: LISTEN
PID/Program name: -
Proto: tcp
Recv-Q: 0
Send-Q: 0
Local Address: 127.0.0.1:3306
Foreign Address: 0.0.0.0:

State: LISTEN
PID/Program name: -
Proto: tcp
Recv-Q: 0
Send-Q: 0
Local Address: 0.0.0.0:6379
Foreign Address: 0.0.0.0:

State: LISTEN
PID/Program name: -
Proto: tcp
Recv-Q: 0
Send-Q: 0
Local Address: 0.0.0.0:80
Foreign Address: 0.0.0.0:

State: LISTEN
PID/Program name: -
Proto: tcp6
Recv-Q: 0
Send-Q: 0
Local Address: :::22
Foreign Address: :::

State: LISTEN
PID/Program name: -
Proto: tcp6
Recv-Q: 0
Send-Q: 0
Local Address: ::1:6010
Foreign Address: :::

State: LISTEN
PID/Program name: -
Proto: tcp6
Recv-Q: 0
Send-Q: 0
Local Address: :::4444
Foreign Address: :::

State: LISTEN
PID/Program name: -
Proto: tcp6
Recv-Q: 0
Send-Q: 0
Local Address: :::80
Foreign Address: :::

State: LISTEN
PID/Program name: -

总结

以上就是今天的内容,本文仅仅简单介绍了paramiko的使用,并且结合linux命令可以实现对服务器状态的监控,可以扩展自己想要监听的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python远程连接服务器获取服务器状态 的相关文章

  • 中断 Select 以添加另一个要在 Python 中监视的套接字

    我正在 Windows XP 应用程序中使用 TCP 实现点对点 IPC 我正在使用select and socketPython 2 6 6 中的模块 我有三个 TCP 线程 一个读取线程通常会阻塞select 一个通常等待事件的写入线程
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • Pandas/Google BigQuery:架构不匹配导致上传失败

    我的谷歌表中的架构如下所示 price datetime DATETIME symbol STRING bid open FLOAT bid high FLOAT bid low FLOAT bid close FLOAT ask open
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • 如何在 Python 中解析和比较 ISO 8601 持续时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Python v2 库 它允许我解析和比较 ISO 8601 持续时间may处于不同单
  • 如何使用python在一个文件中写入多行

    如果我知道要写多少行 我就知道如何将多行写入一个文件 但是 当我想写多行时 问题就出现了 但是 我不知道它们会是多少 我正在开发一个应用程序 它从网站上抓取并将结果的链接存储在文本文件中 但是 我们不知道它会回复多少行 我的代码现在如下 r
  • 如何使用 pybrain 黑盒优化训练神经网络来处理监督数据集?

    我玩了一下 pybrain 了解如何生成具有自定义架构的神经网络 并使用反向传播算法将它们训练为监督数据集 然而 我对优化算法以及任务 学习代理和环境的概念感到困惑 例如 我将如何实现一个神经网络 例如 1 以使用 pybrain 遗传算法
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • pip 列出活动 virtualenv 中的全局包

    将 pip 从 1 4 x 升级到 1 5 后pip freeze输出我的全局安装 系统 软件包的列表 而不是我的 virtualenv 中安装的软件包的列表 我尝试再次降级到 1 4 但这并不能解决我的问题 这有点类似于这个问题 http
  • Python3 在 DirectX 游戏中移动鼠标

    我正在尝试构建一个在 DirectX 游戏中执行一些操作的脚本 除了移动鼠标之外 我一切都正常 是否有任何可用的模块可以移动鼠标 适用于 Windows python 3 Thanks I used pynput https pypi or
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • 在本地网络上运行 Bokeh 服务器

    我有一个简单的 Bokeh 应用程序 名为app py如下 contents of app py from bokeh client import push session from bokeh embed import server do
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date

随机推荐

  • adb MacBook Pro上使用adb命令:Command not found或者每次使用前要source .bash_profile文件

    前言 adb MacBook Pro上使用adb命令报错 Command not found 或者每次使用前要source bash profile文件 一 解决问题1 在根路径配置 bash profile文件 如果没有 touch ba
  • python-面向对象基础-类属性&实例属性-构造&析构

    一 类的定义 class 类名 类体 class Person object pass 二 类中成员的定义 class Person object 属性 name tom age 18 height 180 方法 def eat self
  • C++堆和栈的区别和联系

    2017年09月16日 10 39 33 阅读数 1605 参考博客地址 http blog csdn net hairetz article details 4141043 http blog csdn net handsomesunsh
  • C#学习之ASP.NET概述

    ASP NET的应用 网络应用程序开发 学习ASP NET的优势 易学 设计人员和后台代码人员专注于自己的工作 原因 ASP NET将HTML页面代码和脚本代码分离 高效地创建大规模的网络应用程序 背景 自从互联网的出现 各种网络开发技术层
  • 关于ehcache使用rmi方式实现分布式缓存时遇到的问题

    业务场景 一个架构较老的系统 由于在正式环境中需要搭建集群环境 目前使用echcache来作为缓存 为了减少代码修改 使用了RMI方式来实现集群 使用了被动发现和注册的方式 配置如下
  • Ansible Lookup

    1 文件内容的读取 hosts all vars contents lookup file etc foo txt tasks debug msg the value of foo txt is contents Note 切记读取的是本地
  • 使用gpt绘制奥特曼

    public class Ultraman extends JPanel public void paint Graphics g Color silver new Color 192 192 192 画头 g setColor Color
  • C语言顺序表中删除值为x的元素

    要求时间复杂度为O n 空间复杂度为O 1 实现代码如下 删除线性表中为x的元素 void deleteX SqList L int x int k 0 for i 0 i
  • 全球及中国工业互联网产业运行态势与布局状况调研报告2022-2028年

    全球及中国工业互联网产业运行态势与布局状况调研报告2022 2028年 修订日期 2022年4月 出版单位 鸿晟信合研究院 对接人员 周文文 报告价格 纸质版6500元 电子版6800元 纸质 电子版7000元 有折扣 内容部分有删减 了解
  • 1、网络隧道技术

    网络隧道技术简介 隧道技术 Tunneling 是一类网络协议 它是一种数据包封装技术 它将原始IP包 其报头包含原始发送者和最终目的地 封装在另外一个数据包 称为封装的IP包 的数据净荷中进行传输 使用隧道的原因是在不兼容的网络上传输数据
  • CVE20190708复现

    一 实验环境 基于虚拟机运行 VMware 1 靶机 ip 192 168 8 2 测试机 192 168 8 3 将两个虚拟机设置于同一个网段中 a 在虚拟网络编辑器中 将VMnet0采用桥接模式 并桥接到网线网上 b 设置win7为动态
  • 动态规划浅析

    leetcode53 最大子序和 leetcode62 不同路径 leetcode300 最长递增子序列 动态规划要解决的都是一些问题的最优解 即从很多解决问题的方案中找到最优的一个 当我们在求一个问题最优解的时候 如果可以把这个问题分解成
  • npm install 错误 安装 chromedriver 失败的解决办法

    npm 安装 chromedriver 失败的解决办法 npm 安装 chromedriver 时 偶尔会出错 错误提示类似于 npm ERR chromedriver 2 35 0 install node install js 经分析发
  • cicd 07--构建前后端一体化自动化发布流程

    cicd 07 构建前后端一体化自动化发布流程 1 介绍 2 构建过程 2 1 功能说明 2 2 jenkins gitlab 配置 2 3 测试结果 3 注意事项 4 说明 1 介绍 cicd 04 构建自动化发布流程 介绍了一种通用的自
  • NLP扎实基础3:TF-IDF文本特征提取

    TF IDF简介 TF IDF使用流程 见上图 步骤如下 根据全部语料每个词对应的TF IDF值 每个句子对应全部语料的one hot编码 将TF IDF编码作为特征 Python代码 流程很简单 就不复现了 这里有两个使用的方式 第一种是
  • Flutter中如何强制某个页面横屏

    在很多文章中 提到了Flutter中强制某个页面横屏使用如下代码 SystemChrome setPreferredOrientations DeviceOrientation portraitUp DeviceOrientation po
  • 零基础学员的shell脚本的写作思路详解

    前言 这两天一直再批改学员的脚本作业 大多数学员写的很好 有的学员写的不太好 还有一些还没有入门到学员不知道脚本该咋写 不知道脚本怎么写的学员 绝大多数犯了一个错误 一上来就把脚本想的太复杂了 我们今天单独聊聊这个问题 脚本错误范例示范 写
  • c++面试知识点补充

    1 说说c 结构体和c结构体的区别 1 c的结构体内不允许有函数存在 c 允许有内部成员函数 且允许该函数是虚函数 2 c的结构体对内部成员变量的访问权限只能是public 而c 允许public protected private三种 3
  • android 本地更新版本,Android版本更新之本地数据库更新

    最近上架了一个算法学习类APP 在更新应用版本时 发现数据库依旧没有更新 还是上一个版本的数据内容 遂把这方面的内容记录下来 PS 本人处女作APP 算法之家 可以在豌豆荚 360手机助手 腾讯应用宝中下载安装 如下是父类的构造函数 所有的
  • python远程连接服务器获取服务器状态

    文章目录 前言 一 python远程连接服务器 1 由于paramiko属于第三方库 所以需要使用如下命令先行安装 2 SSHClient常用的方法介绍 3 基本使用 二 结合linux命令查看服务器状态 查看对应的linux命令返回值 通