python读取配置文件scp文件或文件夹

config.json 文件

{"common_params": {"deploy_location": "/data","source_file": "/home/test/aitest"},"devices": [{"name": "Device1","ip_address": "172.28.9.50","username": "test","password": "test","upgrade": false,"deploy_test_program": true},{"name": "Device2","ip_address": "192.168.1.101","username": "user2","password": "password2","upgrade": false,"deploy_test_program": false},{"name": "Device3","ip_address": "192.168.1.102","username": "user3","password": "password3","upgrade": false,"deploy_test_program": false}]
}

python读取配置文件scp

#!/usr/bin/python3
# encoding: utf-8import os
import json
import paramikodef upgrade_device(upgrade_option):if upgrade_option:# 实现升级被测设备的逻辑print("开始升级被测设备...")else:print("不进行升级被测设备。")def deploy_program(device_info, common_params):name = device_info['name']ip_address = device_info['ip_address']username = device_info['username']password = device_info['password']dest_path = common_params['deploy_location']source_file = common_params['source_file']upgrade_option = device_info['upgrade']deploy_test_program = device_info['deploy_test_program']# 填写被测设备IPprint(f"填写{name}的IP地址: {ip_address}")# 程序部署位置,默认为 /dataprint(f"{name}的程序部署位置: {dest_path}")print(f"{name}的源程序: {source_file}")print(f"{name}的用户名: {username}")print(f"{name}的密码: {password}")# 获取本地文件名filename = os.path.basename(source_file)# 在远程目录下拼接文件名remote_path = os.path.join(dest_path, filename)# 判断是否进行升级upgrade_device(upgrade_option)# 判断是否部署测试程序if deploy_test_program:SCP_CMD_BASE = r"""expect -c "set timeout 10 ;spawn scp -P {port} -r {localsource} {username}@{host}:{remotedest} ;expect *assword* {{{{ send {password}\r }}}} ;expect *\r ;expect \r ;expect eof"""".format(username=username, password=password, host=ip_address, localsource=source_file, remotedest=dest_path, port=22)SCP_CMD = SCP_CMD_BASE.format(localsource=source_file)print("execute SCP_CMD: ", SCP_CMD)
#        p = subprocess.Popen(SCP_CMD, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
#        p.communicate()os.system(SCP_CMD)print(f"{name}的程序部署完成。")else:print(f"{name}不需要部署测试程序。")if __name__ == "__main__":with open('config.json', 'r') as f:config = json.load(f)common_params = config['common_params']devices = config['devices']for device_info in devices:deploy_program(device_info, common_params)

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

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

相关文章

Spring Boot应用集成Actuator组件以后怎么自定义端点暴露信息

一、 前言 在平时业务开发中,我们往往会在spring Boot项目中集成Actuator组件进行系统监控,虽然Actuator组件暴露的端点信息已经足够丰富了,但是特殊场景下,我们也需要自己暴露端点信息,此时应该怎么操作呢&#xff1…

爬虫知识--03

数据存mysql import requests from bs4 import BeautifulSoup import pymysql# 链接数据库pymysql conn pymysql.connect(userroot,password"JIAJIA",host127.0.0.1,databasecnblogs,port3306, ) cursor conn.cursor() cursor conn.cursor()# 爬数据 res request…

从业务应用开发者的角度优化MySQL性能

MySQL的性能优化包括操作系统和硬件优化、MySQL服务配置优化、合理的表结构设计和索引设计、查询优化等等,其中业务应用开发者能做的主要在表结构、索引、查询三个方面,以下对这三个方面的优化思路做简单介绍。内容主要参考《高性能MySQL(第四…

如何解决Nginx启动出现闪退问题?

哈喽,大家好,我是小浪。那么大家首次在启动nginx的时候,绝大部分同学会出现以下情况,就是我们双击nginx.exe文件之后,屏幕闪退一下就没了,然后我们访问localhost:8080提示404. 那么出现这种情况其实是我们…

全面解析企业财务报表系列之一:企业经营者懂财务的重要性

全面解析企业财务报表系列之一:企业经营者懂财务的重要性 一、企业经营者懂财务的重要性二、如何通过数字展开经营 一、企业经营者懂财务的重要性 企业经营者不懂会计,就好像蒙着眼睛开车。而方向盘就是你的战略,刹车系统就是你的预算&#…

去重求和(最大N个数和最小N个数的和)(C 语言)

题目 给定一个数组,编写一个函数, 计算他的最大N个数和最小N个数的和, 需要对数组进行去重。 输入 第一行输入M,M表示数组大小 第二行输入M个数,表示数组内容 第三行输入N表示需要计算的最大最小N的个数 输出 输出…

NestJS入门7:增加异常过滤器

前文参考: NestJS入门1 NestJS入门2:创建模块 NestJS入门3:不同请求方式前后端写法 NestJS入门4:MySQL typeorm 增删改查 NestJS入门5:加入Swagger NestJS入门6:日志中间件 本文代码基于上一篇文章《…

深度学习基础(二)卷积神经网络(CNN)

之前的章节我们初步介绍了深度学习相关基础知识和训练神经网络: 深度学习基础(一)神经网络基本原理-CSDN博客文章浏览阅读924次,点赞13次,收藏19次。在如今的科技浪潮中,神经网络作为人工智能的核心技术之…

关于git子模块实践(一)

背景 在日常项目开发中,随着项目的迭代,不可避免的是主项目会引入到很多三方库,或者自研的一些模块。有一种场景,就是这些模块,是随着开发而进行迭代,且多个项目公用的,这种情况,在…

第3.3章:StarRocks数据导入——Stream Load

一、概述 Stream Load是StarRocks最为核心的导入方式,用户通过发送HTTP请求将本地文件或数据流导入至StarRocks中,其本身不依赖其他组件。 Stream Load支持csv和json两种数据文件格式,适用于数据文件数量较少且单个文件的大小不超过10GB 的场…

v-rep插件

v-rep官网插件汉化教程 官网教程 插件是什么 插件本质上就是遵循一定规范的API编写出来的程序,在v-rep中最终需要编译为动态库。 linux下是libsimXXXX.so; 其中XXXX是插件的名称。 请至少使用4个字符,并且不要使用下划线,因为…

kafka生产者2

1.数据可靠 • 0:生产者发送过来的数据,不需要等数据落盘应答。 风险:leader挂了之后,follower还没有收到消息。。。。 • 1:生产者发送过来的数据,Leader收到数据后应答。 风险:leader应答…

【机器学习】数据清洗——基于Numpy库的方法删除重复点

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

解锁网络潜能:深入探索SCTP及其在现代通信中的革命性作用

第一部分:SCTP简介 流控制传输协议(SCTP)是一种传输层协议,设计用于支持Internet上的多路径消息传输。它结合了TCP的可靠性和UDP的简洁性,提供了多种高级特性,如多宿(multi-homing)…

解释Iterable和Iterator接口

在Java中,Iterable和Iterator是两个重要的接口,它们在集合框架中扮演着核心的角色,尤其是在遍历集合元素的时候。 Iterable接口 Iterable接口是Java Collections Framework的一部分,位于java.lang包中。任何实现了Iterable接口的…

PostgreSQL索引篇 | BTree

B-Tree索引 (本文为《PostgreSQL数据库内核分析》一书的总结笔记,需要电子版的可私信我) B树特点: 非叶子节点含一个或多个关键字值和子节点指针,不指向实际数据的存储位置所有关键字都是叶子节点,每个叶…

Python运算符你学会了吗?

1.算术运算符 (加)、-(减)、*(乘)、/(除)、%(取余)、//(取整)、**(求幂) a 12 b 3 c 7print(a b) # 15 …

关于Kinect 互动沙盘 深度图 Shader Graph 分层

把Kinect的深度图穿给Shader Graph using com.rfilkov.kinect; using UnityEngine; using UnityEngine.UI; public class GetDepthTex : MonoBehaviour { public Material Mat_SandTable; void Update() { Mat_SandTable.SetTexture("_MainTex"…

【openGL教程08】关于着色器(02)

LearnOpenGL - Shaders 一、说明 着色器是openGL渲染的重要内容,客户如果想自我实现渲染灵活性,可以用着色器进行编程,这种程序小脚本被传送到GPU的显卡内部,起到动态灵活的着色作用。 二、着色器简述 正如“Hello Triangle”一章…

【寸铁的刷题笔记】树、dfs、bfs、回溯、递归(二)

【寸铁的刷题笔记】树、dfs、bfs、回溯、递归(二) 大家好 我是寸铁👊 金三银四,树、dfs、bfs、回溯、递归是必考的知识点✨ 快跟着寸铁刷起来!面试顺利上岸👋 喜欢的小伙伴可以点点关注 💝 上期回顾 感谢大家的支持&am…