python + ssh+ rich 升级和备份脚本

news2024/9/30 17:25:27

升级版本 (根据AI提供的脚本,修改后)

import os
import paramiko
from scp import SCPClient
from rich.progress import (
    BarColumn,
    DownloadColumn,
    Progress,
    TaskID,
    TextColumn,
    TimeRemainingColumn,
    TransferSpeedColumn,
)


def get_file_size(file_path):
    return os.path.getsize(file_path)


def progress_callback(filename, size, sent, progress_instance, task_id):
    progress_instance.update(task_id, completed=sent)


# 创建 SSH 客户端并连接到远程服务器
def create_ssh_client(host, port, username, password):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(host, port, username, password)
    return client


def scp_transfer_with_progress(local_file, remote_path, host, port, username, password):
    os.chdir(local_file)
    ssh_client = create_ssh_client(host, port, username, password)
    with Progress(TextColumn("[bold blue] {task.fields[filename]}", justify="right"),
                  BarColumn(),
                  "[progress.percentage]{task.percentage:>3.1f}%",
                  "•",
                  DownloadColumn(),
                  "•",
                  TransferSpeedColumn(),
                  "•",
                  TimeRemainingColumn(), ) as progress:
        task_id = progress.add_task(filename="upgrade ...", description="upgrade...")

        def userProgress(filename, size, sent):
            progress.update(task_id, total=size, advance=sent,
                            filename="Upgrade: " + os.path.basename(filename).decode())

        with SCPClient(ssh_client.get_transport(), progress=userProgress, socket_timeout=15) as scp:
            scp.put("./", remote_path, recursive=True)
    ssh_client.close()


import sys
import time

if __name__ == "__main__":
    host = sys.argv[1]
    port = 22
    username = sys.argv[2]
    password = sys.argv[3]
    local_file = "upgradeSoftware"
    remote_path = "/mnt/flash"
    scp_transfer_with_progress(local_file, remote_path, host, port, username, password)`在这里插入

备份版本 (根据AI提供的脚本,修改后)

import os
import paramiko
from scp import SCPClient
from rich.progress import Progress
from rich.progress import (
    BarColumn,
    DownloadColumn,
    Progress,
    TaskID,
    TextColumn,
    TimeRemainingColumn,
    TransferSpeedColumn,
)


```python
def get_file_size(file_path):
    return os.path.getsize(file_path)


def progress_callback(filename, size, sent, progress_instance, task_id):
    progress_instance.update(task_id, completed=sent)


# 创建 SSH 客户端并连接到远程服务器
def create_ssh_client(host, port, username, password):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(host, port, username, password)
    return client


def scp_transfer_with_progress(local_file, remote_path, host, port, username, password):
    ssh_client = create_ssh_client(host, port, username, password)
    ssh_client.exec_command("rm  -rf /mnt/flash/log/message.*txt")

    with Progress(TextColumn("[bold blue] {task.fields[filename]}", justify="right"),
                  BarColumn(),
                  "[progress.percentage]{task.percentage:>3.1f}%",
                  "•",
                  DownloadColumn(),
                  "•",
                  TransferSpeedColumn(),
                  "•",
                  TimeRemainingColumn(), ) as progress:
        task_id = progress.add_task(filename="Downloading...", description="Downloading...")

        def userProgress(filename, size, sent):
            progress.update(task_id, total=size, advance=sent, filename="Current Download:" + os.path.basename(
                filename))

        with SCPClient(ssh_client.get_transport(), progress=userProgress, socket_timeout=15) as scp:
            scp.get(remote_path, local_file, recursive=True)
    ssh_client.close()


import sys
import time

if __name__ == "__main__":
    host = sys.argv[1]
    port = 22
    username = sys.argv[2]
    password = sys.argv[3]
    local_file = time.strftime("%Y%m%dT%H%M%S", time.localtime())
    os.mkdir(local_file)
    remote_path = sys.argv[4]
    scp_transfer_with_progress(local_file, remote_path, host, port, username, password)

可以提示很多的中间信息

感觉AI 没以前好用了

在这里插入图片描述

功能齐全

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2136501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【mujoco( DeepMind )】入门学习记录1

更新日期:202409 前言: 记录下自己学习Mujoco历程,直接使用deepMind官方给的python使用方案。 平台: python 3.12: DeepMind维护的Mujoco可以直接在3.8版本以后的python中直接安装。 Anacoda:利用anacoda管理的自己p…

删除字符串末尾的*(星号)

要求 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除, 例如,字符串中的内容为:****A*BC*DEF*G******,删除后,字符串中的内容应当是:***A*BC*DEF*G。…

用Python获取PDF页面的大小、方向和旋转角度

在文档管理和自动化领域,了解PDF文档的内在属性(如页面大小、方向和旋转角度)对于确保一致的文档处理和布局保真度至关重要。这些属性在内容重用、归档以及PDF无缝集成到网络环境或其他数字工作流程中起着关键作用,因为它们直接影…

Leetcode面试经典150题-162.寻找峰值

解法都在代码里,不懂就留言或者私信 想清楚的话会特别简单,你可能想不到这是个二分。。。 class Solution {/**本题题目规定我们只能用O(logN)的时间复杂度来解题,这显然就是让二分嘛而题目给的数组本身是无需,怎么二分呢其实我…

《网络协议 - HTTP传输协议及状态码解析》

文章目录 一、HTTP协议结构图二、HTTP状态码解读1xx: 信息响应类2xx: 成功响应类3xx: 重定向类4xx: 客户端错误类5xx: 服务器错误类 一、HTTP协议结构图 二、HTTP状态码解读 HTTP状态码(英语:HTTP Status Code)是用以表示网页服务器超文本传…

『功能项目』战士的位移型技能【46】

我们打开上一篇45战士的伤害型技能的项目, 本章要做的事情是制作技能按钮,点鼠标点击时释放如果20米内存在敌人会移动到敌人身边(对多个敌人逻辑暂未写)并对怪物造成一定伤害 首先对战士职业的动画控制器增加一个新的技能2动画 设…

镜像问题(k8s部署考试系统)

如果使用containerd拉取不到镜像的话,就使用docker 1.修改decker的镜像源 [rootk8s-master ~]# vim /etc/docker/daemon.json { "registry-mirrors": [ "https://do.nark.eu.org", "https://dc.j8.work", …

Vue : 生命周期

目录 1. beforeCreate(vu2) 2. created(vu2) 3. setup(vu3) 4. beforeMount 5. mounted 6. beforeUpdate 7. updated 8. beforeDestroy 9. destroyed Vue.js 的生命周期是指 Vue 实例从创建到销毁的整个过程中的各个阶段。在 Vue 中,有多个关键的生命周期钩…

Ubuntu22.04系统安装opencv步骤简述及问题解决方法

前言 opencv是一个功能强大、开源且跨平台的计算机视觉库,适用于多种编程语言和操作系统,能够帮助开发者构建各种视觉项目。其模块众多,提供了诸多功能,能够进行图像处理、视频处理等等。比如:Highgui模块提供图像用户…

EasyExcel拿表头(二级表头)爬坑,invokeHeadMap方法

OK,不废话,直接开干!说实话是有些坑,或者是我不会用吧 模板如下: invokeHeadMap 这个方法其实针对第一行就是表头的完全没问题。针对第二行的,我DEBUG拿到的是这样很明显,他拿到了第一行;既然…

如何通过OceanBase的多级弹性扩缩容能力应对业务洪峰

每周四晚上的10点,都有近百万的年轻用户进入泡泡玛特的抽盒机小程序,共同参与到抢抽盲盒新品的活动中。瞬间的并发流量激增对抽盒机小程序的系统构成了巨大的挑战,同时也对其数据库的扩容能力也提出了更高的要求。 但泡泡玛特的工程师们一点…

安卓BLE蓝牙通讯

蓝牙测试demo 简介   Android手机间通过蓝牙方式进行通信,有两种常见的方式,一种是socket方式(传统蓝牙),另一种是通过GATT(BLE蓝牙)。与传统蓝牙相比,BLE 旨在大幅降低功耗。这样…

Superset二次开发之源码DependencyList.tsx 分析

功能点 路径 superset-frontend\src\dashboard\components\nativeFilters\FiltersConfigModal\FiltersConfigForm\DependencyList.tsx /*** Licensed to the Apache Software Foundation (ASF) under one* or more contributor license agreements. See the NOTICE file* dist…

OpenCV结构分析与形状描述符(24)检测两个旋转矩形之间是否相交的一个函数rotatedRectangleIntersection()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 测两个旋转矩形之间是否存在交集。 如果存在交集,则还返回交集区域的顶点。 下面是一些交集配置的例子。斜线图案表示交集区域&#…

C++《类和对象》(下)

在之前类和对象(中)我们学习了类当中的6大默认成员函数,我们了解了6大成员函数的结构特征和特点以及在不同情况各个成员函数是如何调用的,那么接下来我们在本篇当中将继续学习之前在学习构造函数中未了解的初始化列表,…

MySql基础-单表操作

1. MYSQL概述 1.1 数据模型 关系型数据库 关系型数据库(RDBMS):建立在关系模型基础上,由多张相互连接的二维表组成的数据库。 特点: 使用表存储数据,格式统一,便于维护 使用SQL语言操作,标准统一&…

高性能微服务架构:Spring Boot 集成 gRPC 实现用户与订单服务即时交互

gRPC 是一种由 Google 开发的高性能、开源的远程过程调用(Remote Procedure Call, RPC)框架。它允许在不同的计算机系统或进程之间进行通信,使得分布式系统和微服务架构中的服务之间能够轻松地相互调用方法。gRPC 基于 HTTP/2 协议&#xff0…

django-admin自定义功能按钮样式

位置在原来的django-admin 栏中的上方【会因为屏幕大小而变换位置】 <!-- 这里是不会替换掉旧的 添加按钮 &#xff0c;而是添加多一个按钮【点击Crawl Data】--> <!-- /home/luichun/lc/Pyfile/Pywebback/app/paqu/templates/admin/yourmodel_changelist.html -->…

基于k8s手动部署rabbitmq集群(Manually Deploying RabbitMQ Cluster Based on k8s)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

安全基础设施如何形成统一生态标准?OASA 硬件安全合作计划启动 | 2024 龙蜥大会

近日&#xff0c;2024 龙蜥操作系统大会&#xff08;OpenAnolis Conference&#xff09;在北京盛大召开。 与此同时&#xff0c;由龙蜥社区运营委员会副主席、龙腾计划生态负责人金美琴&#xff0c;阿里云智能集团高级技术专家张天佳&#xff0c;海光信息技术生态技术总监李伟&…