第三方模块

loguru使用

# https://blog.csdn.net/lixiang5453/article/details/121217148
# pip3 install loguru

from loguru import logger

# 配置日志输出
log_format = "<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
log_path = "logs/"
log_filename = log_path + "app_{time:YYYY-MM-DD}.log"

logger.remove()  # 移除默认的日志输出
logger.add(log_filename, rotation="00:00", retention="7 days", format=log_format, level="INFO")

# 在上面的示例代码中,我们首先导入Loguru库,然后配置日志的输出格式、保存路径以及日志文件名。通过logger.add方法,我们指定了日志文件的切分方式为每天(rotation="00:00"),保留7天的日志(retention="7 days"),以及日志的格式和输出级别。接着,我们使用不同级别的日志函数写入日志消息。
# 日志将会根据日期自动切分,并保存在指定的目录中。例如,如果今天是2023年8月18日,那么生成的日志文件名将为app_2023-08-18.log,并且在接下来的7天内保留。

PyWinRM

# PyWinRM是远程管理windows的pyhton模块

# pip install pywinrm

# windows启动
winrm quickconfig -q

# PyWinRM操作windows
import winrm
s = winrm.Session('10.244.14.24:5985', auth=('username', 'passwd'), transport='ntlm')
r = s.run_cmd('whoami')
r.status_code  # 0 为正常
r.std_out  # bytes 得到的正常执行结果
r.std_err  # bytes 无异常消息为空字节串

# run_cmd执行cmd命令
# run_ps执行PowerShell脚本
# copy_file上传下载文件


import winrm
# 构造远程会话
session = winrm.Session(
    target='http://remote-host:5985/wsman',
    auth=('username', 'password'),
    transport='ntlm'
)
'''
	target: 要连接的远程主机地址。可以是主机名或 IP 地址。
	auth: 指定身份验证方式的参数。这通常是一个包含用户名和密码的元组,例如:("username", "password")。
	ransport: 指定远程连接的传输方式。可以是 "ntlm"(默认)
	transport_timeout:连接超时时间,以秒为单位。
'''
# 执行远程命令
result = session.run_ps('Get-Process')
print(result.status_code)
print(result.std_out)
print(result.std_err)

paramiko

import paramiko

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在~/.ssh/known_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='10.0.0.88', port=22, username='root', password='1')
# 执行命令,不要执行top之类的在不停的刷新的命令
stdin, stdout, stderr = ssh.exec_command('df -h')
# 获取命令结果
result = stdout.read()
# 获取的命令结果是bytes类型
print(result.decode(encoding="utf-8"))
# 关闭连接
ssh.close()

批量上传文件

# https://blog.csdn.net/Sxiaokun/article/details/124070120
import paramiko


def sftp(hostname, username, password, port, local, remoted):
    # 创建ssh连接
    ssh_conn = paramiko.Transport((hostname, port))
    ssh_conn.connect(username=username, password=password)
    # 创建ftp工具(变量)
    ftp = paramiko.SFTPClient.from_transport(ssh_conn)
    # 上传文件
    ftp.put(local, remoted)
    # 关闭ssh连接
    ssh_conn.close()


if __name__ == '__main__':
    servers = {
        "10.0.0.88": {
            "username": "root",
            "password": "1",
            "port": 22,
        },
        "10.0.0.80": {
            "username": "root",
            "password": "1",
            "port": 22,
        },
    }
    source_file = r'D:\项目文件\测试\1.zip'
    remote_dir = '/opt/1.zip'
    for ip, info in servers.items():
        sftp(
            hostname=ip,
            username=info.get('username'),
            password=info.get('password'),
            port=info.get('port'),
            local=source_file,
            remoted=remote_dir
        )

'''
	open_sftp 是SSHClient的一个方法,需要先建立一个SSH连接,然后在此连接上创建一个SFTP会话。而 SFTPClient 则直接用于SFTP会话的创建,不需要显式的SSH连接
	SFTPClient 是Paramiko库中一个独立的类,它专门用于创建和管理SFTP会话,而不需要显式创建SSH连接。你可以通过创建一个 SFTPClient 实例来直接操作远程文件系统
'''


# 异步
from celery import Celery
import paramiko

app = Celery('remote_tasks', broker='redis://localhost:6379/0')

def execute_remote_command(hostname, username, password, command):
    # ... 与前面的代码相同 ...

@app.task
def execute_remote_task(hostname, username, password, command):
    result = execute_remote_command(hostname, username, password, command)
    return result

# 使用示例
tasks = [
    ('remote_host1', 'user1', 'pass1', 'ls -l /path1'),
    ('remote_host2', 'user2', 'pass2', 'ls -l /path2'),
    # 添加更多任务...
]

for task in tasks:
    hostname, username, password, command = task
    execute_remote_task.delay(hostname, username, password, command)

psutil获取的一些指标

# CPU信息:
    获取CPU逻辑核心数量:psutil.cpu_count()
    获取CPU物理核心数量:psutil.cpu_count(logical=False)
    获取CPU使用率:psutil.cpu_percent(interval=1)
    获取每个CPU核心的使用率:psutil.cpu_percent(interval=1, percpu=True)
    获取CPU时间统计信息:psutil.cpu_times()
    
# 内存信息:
    获取内存使用情况:psutil.virtual_memory()
    获取交换分区使用情况:psutil.swap_memory()
    
# 磁盘信息:
    获取磁盘分区列表:psutil.disk_partitions()
    获取磁盘使用情况:psutil.disk_usage('/')
    
# 网络信息:
    获取网络连接信息:psutil.net_connections()
    获取网络IO统计信息:psutil.net_io_counters()

# 系统启动时间:
	获取系统启动时间:psutil.boot_time()
    
# 进程信息:
    获取所有运行中的进程列表:psutil.process_iter()
    根据进程ID获取进程对象:psutil.Process(pid)
    获取进程的CPU使用率:process.cpu_percent(interval=1)
    获取进程的内存使用情况:process.memory_info()
import psutil #是一个功能强大的跨平台的系统管理库
import datetime
import time

def func1():
    # #cpu的逻辑核数
    cpu_core = psutil.cpu_count(logical=False)
    # cpu的使用率
    # time.sleep(1) #睡眠一秒钟
    cup_per = psutil.cpu_percent(interval=1)#每隔1秒刷新一下

    # 内存信息
    memory_info = psutil.virtual_memory()

    # 硬盘信息
    disk_info = psutil.disk_usage("/") #根目录磁盘信息

    # 网络信息
    net_info = psutil.net_io_counters()
    #接收数据
    in_info = net_info.bytes_recv
    #发送数据:
    send_info = net_info.bytes_sent
    #本机ip
    ip_add = psutil.net_if_addrs()
    # print(ip_add)
    ##windows中的ip截取:
    #ip_add1 = ip_add['本地连接* 13'][2][1]
    #Linux中的ip截取
    # 获取当前系统时间
    current_time = datetime.datetime.now().strftime("%F %T")  #%F年月日 %T时分秒
#方式一:直接打印输出
    print(f"当前时间为:{current_time}")
    print(f"cpu的逻辑核数为:{cpu_core}")
    print(f"cpu的使用率为:{cup_per}%")
    print(f"总内存大小为:{memory_info.total/1024/1024}M")
    print(f"根目录大小为:{disk_info.total/1024/1024}M")
    # print(f"本机的ip为{ip_add1}")

func1()

posted @ 2023-09-05 15:07  秋洛尘  阅读(58)  评论(0)    收藏  举报