Python
记录于:2020年11月17日21:07:10
- 代码演练
# CodeSheep01.py # python 加减乘除 print(2 + 4) print(4 - 2) print(4 / 2) print(2 * 2) print((2 + 4) * 5 / 2) # 转为int类型 print(4 // 2) # python 是否相等 print(2 == 2) print("_________________________________________________________") # python 变量 = 值 ----》 Python中区分大小写 ----》 多个单词建议使用下划线隔开 box_width = 3 box_height = 4 BOX_WIDTH = 3 BOX_HEIGHT = 4 mj = box_width * box_height MJ = BOX_WIDTH * BOX_HEIGHT print(mj) print(MJ) print("_________________________________________________________") # python 流程控制 if-else 语句 age = 18 if age >= 16: print("可以进入!") else: print("年龄太小,不可以进去!") print("_________________________________________________________") # python 流程控制 if-elif-else 语句 score = 89 if score >= 90: print("A") elif score >= 80: print("B") elif score >= 70: print("C") elif score >= 60: print("D") else: print("E") print("_________________________________________________________") # python 的 for 遍历:从一个序列中逐一取出 # 【范围:range】:range会生成一列数字 ----》 # range(5):从0~4,不包含5 # 如果要指定从几开始,则需要添加第一个参数 ----》range(1,5):从1到5 # range(1,10,2):表示从1到10遍历,跳过2执行 # 其中range(1, 10, 2) 不包含 10 # 1 # 3 # 5 # 7 # 9 for i in range(1, 10, 2): print(i) print("_________________________________________________________") # python 中的 while 循环 n = 0 while n < 10: print(n) n += 1 else: print("循环结束!") print("_________________________________________________________") # python 经典案例,输出乘法口诀表 for i in range(1, 10): for j in range(1, i + 1): print(f'{i}*{j}={i * j}', end=' ') print() print("_________________________________________________________") # python 中的 break # while True: # inp = input('请输入----》?(输入0退出程序!)') # if inp == '0': # break # print('您输入的是:', inp) print("_________________________________________________________") # python 中的 continue for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: if i == 4: continue print(i) print("_________________________________________________________") # python 猜数字 && 导入Jar import random markdown = random.randint(1, 10) print(markdown) total = int(input('请设置要猜的次数')) count = 0 while True: n = int(input('请输入一个从1~10的整数')) if n < markdown: print('MIN') elif n > markdown: print('MAX') else: print('SUCCESS!') break count += 1 if count >= total: print(f'您一共猜了{count},Game Over!') break # CodeSheep02.py # python 中一个单引号和两个单引号 都是相同的 # 转义字符:【\t:相当于一个Tab】、【\r:换行】 print("Python") print('Python') print("_________________________________________________________") # python 根据【正向、反向 索引】取值 sheep = '胡汉三又回来啦' print(sheep[0]) print(sheep[-1]) # 切片,每隔两个取一次 ----》 【sheep[1:]:从第一个到结束】、【sheep[:5]:从第一个到结束】、【sheep[:]:复制】 print(sheep[1:5:2]) print("_________________________________________________________") # python 格式化输出:format() user_1 = '韩梅梅' user_2 = '李雷' print('{}对{}说:“Hello”'.format(user_1, user_2)) # 新用法 print(f'{user_1}对{user_2}说:“Hello”') # 连接多个字符串 print("胡" + "汉" + "三") print("_________________________________________________________") # python 列表与索引 my_list = [1, "张三", '王老五', 3.14] print(my_list[3]) print(my_list[-1]) # 追加和插入 my_list.append('胡汉三') my_list.insert(1, 'Gioia') # 合并列表 my_list.extend([11, 22, 33]) # 从末尾删除一个元素 my_list.pop() # 根据名称删除 my_list.remove('王老五') # 修改 my_list[1] = 111 print(my_list) print("_________________________________________________________") # python 元组() 不可修改的集合 my_set = (1, "张三", '王老五', 3.14) print(my_set[1:3]) print("_________________________________________________________") # python 字典{} 类似于Java中的Map user = { 'name': '张三三', 'age': 24, 'gender': 'male' } # 添加一个元素 user['fav'] = '打篮球' # 取出单个属性 print(user) print(user["name"]) print("_________________________________________________________") # python 函数使用 def count_sheep(n, m): s = 0 while n <= m: s += n n += 1 return s # 调用函数 print(count_sheep(1, 100)) # 读取外部文件 f = open('鹅鹅鹅.txt', encoding='utf-8') s = f.read() print(s) f.close() # 写入 f = open('coversheet.md', mode='w', encoding='utf-8') f.write('1. markdown\n') f.write(' * 格式') f.close() # 类 class Person: def __init__(self, name, sex, birthday): self.name = name self.sex = sex self.birthday = birthday def say(self, word): print(f'{self.name}说:“{word}”') # 调用 zs = Person('张三', '男', '2020-02-04') zs.say('你好') # Anaconda.py # coding:utf-8 print("____________________________整合_____________________________") import os, time, shutil class Anaconda: def __init__(self, path): self.path = path @staticmethod def backups(): source = [r'C:\Users\yy150\demo03\target\demo-0.0.1-SNAPSHOT.war'] # 目标目录 target_dir = 'D:\\Users\\' # 指定目录 target = target_dir + time.strftime('%Y-%m-%d') + '.zip' print("output route" + '\t' + target) zip_command = "zip -qr \"%s\" \"%s\"" % (target, ' '.join(source)) if os.system(zip_command) == 0: print('Successful backup to', target) else: print('Backup FAILED') @staticmethod def each_file(filepath, new_filepath): """ 读取每个文件夹,将遇到的指定文件统统转移到指定目录中 :param filepath: 想要获取的文件的目录 :param new_filepath: 想要转移的指定目录 :return: """ l_dir = os.listdir(filepath) # 读取目录下的文件或文件夹 for one_dir in l_dir: # 进行循环 full_path = os.path.join('%s\%s' % (filepath, one_dir)) # 构造路径 new_full_path = os.path.join('%s\%s' % (new_filepath, one_dir)) if os.path.isfile(full_path): # 如果是文件类型就执行转移操作 if one_dir.split('.')[1] == 'xml' or one_dir.split('.')[1] == 'txt': # 【or:或者】 shutil.copy(full_path, new_full_path) # 这个是转移的语句,最关键的一句话 else: # 不为文件类型就继续递归 Anaconda.each_file(full_path, new_filepath) # 如果是文件夹类型就有可能下面还有文件,要继续递归 @staticmethod def remove(): delList = [] delDir = r'C:\Users\yy150\demo03\src\main\resources' delList = os.listdir(delDir) for f in delList: filePath = os.path.join(delDir, f) if os.path.isfile(filePath): os.remove(filePath) print(filePath + " was removed!") elif os.path.isdir(filePath): shutil.rmtree(filePath, True) print("Directory: " + filePath + " was removed!") @staticmethod def replace(): f1 = r'C:\Users\yy150\Desktop\resources' f2 = r'C:\Users\yy150\demo03\src\main\resources' path = r'C:\Users\yy150\demo03\src\main' if os.path.exists(f2): shutil.rmtree(f2) # 如有有删除指定目录 print("删除成功!") if os.path.exists(f1): shutil.move(f1, path) print("移动成功!") else: print("已经移动") @staticmethod def generate_war(): classpath = r'C:\Users\yy150\demo03' os.system('mvn -B -f C:/Users/yy150/demo03 clean package') code = Anaconda(123) # python 备份war # code.backups() # python 提取配置文件 old_path = r'D:\a' new_path = r'D:\b' # code.each_file(old_path, new_path) # python 清除配置文件 # code.remove() # python 替换配置文件 # code.replace() # python 使用maven生成War包 code.generate_war() if __name__ == '__main__': f1 = '/home/appmanager/xjld/apache-tomcat-8.5.42/backups/demo04/resources' # 待移动 f2 = '/home/appmanager/xjld/apache-tomcat-8.5.42/backups/demo05/resources' # 删除 path = '/home/appmanager/xjld/apache-tomcat-8.5.42/backups/demo05' # 目的 code.replace(f1, f2, path) # ssh #!/usr/bin/env python #coding:utf-8 import json import paramiko def connect():#连接 'this is use the paramiko connect the host,return conn' ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # ssh.connect(host,username='root',allow_agent=True,look_for_keys=True) #ssh.connect(host,username='root',password='root',allow_agent=True) ssh.connect(hostname='172.18.58.38', port=22, username='appmanager', password='1P5q%&b^9x@emCYD') return ssh except: return None def exec_commands(conn): 'this is use the conn to excute the cmd and return the results of excute the command' #cmd = 'cd /home/appmanager/xjld/tomcat-dnc_order/bin/;./shutdown.sh;cd /home/appmanager/xjld/tomcat-dnc_order/webapps/;mv dnc_order.war /home/appmanager/xjld/' cmd = 'cd /home/appmanager/xjld/;mkdir aaa;ps -ef | grep tomcat' stdin,stdout,stderr = conn.exec_command(cmd) results=stdout.read() return results def copy_module(conn,inpath,outpath): 'this is copy the module to the remote server' ftp = conn.open_sftp() ftp.put(inpath,outpath) ftp.close() return outpath if __name__ == '__main__': print copy_module(connect(),'D:\\dnc_monitor_all.war','/home/appmanager/xjld/dnc_monitor_all.war') print exec_commands(connect()) # checkout #-*- coding: UTF-8 -*- import time,os,sys def checkout(): setting['dist'] = dist+time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime()) cmd='svn export %(url)s %(dist)s --username %(user)s --password %(pwd)s'%setting return os.system(cmd) if __name__ == '__main__': setting={ 'svn':'C:\\Program Files\\TortoiseSVN\\bin',#svn的程序所在路径 'url':'XXX',#svn地址 'user':'XXX', 'pwd':'XXX', 'dist':'D:\\python_project\\dnc_order',#目标地址 } dist = setting['dist'] os.chdir(setting['svn']) checkout()
windows中安装zip命令-‘zip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- 个人心得
- 在写Python目标目录压缩模块中,由于windows 没有zip 命令因此报错,在网络上找了好多的方式,都无法使用,也有好多的zip安装包需要使用币去买,贵的还要花50币。像我这种比较穷的人,因此就多花了点点时间找了找,最终找到了。
- zip命令下载
- 链接:https://pan.baidu.com/s/1uoiwngBSZDJPzllSXCevlg
- 提取码:k3k3
- 使用方式
- 配置环境变量
- WIN + R输入cmd 命令盘符中输入 zip ,如下所示,就说明环境配置成功了!
- 配置环境变量
解决python 调用adb 显示‘adb‘ �����ڲ����ⲿ���Ҳ���ǿ����еij��� ���������ļ���的问题
备份war包
备份配置文件
python3 自动化部署javaweb系统到远程tomcat
清空指定目录
删除一个目录
os.remove拒绝访问解决办法
https://blog.csdn.net/weixin_41775301/article/details/90544852
python3 自动打包部署war包
python执行Linux命令,连续执行多条Linux命令
完整的自动化Python运维(AutoDeploy.py)
#!/usr/bin/env python # -*- coding: UTF-8 -*- # pip install paramiko import paramiko import os import os.path import shutil import time def checkout(): print('Checkout start...') try: cmd = 'svn export %(url)s %(dist)s --username %(user)s --password %(pwd)s' % setting os.system(cmd) print('Checkout success!') except: print('Check Error!') print('=='*60) def backups(): source = [r'C:\Users\yy150\demo03\target\demo-0.0.1-SNAPSHOT.war'] # 目标目录 target_dir = 'D:\\Users\\' # 指定目录 target = target_dir + time.strftime('%Y-%m-%d') + '.zip' print("output route" + '\t' + target) zip_command = "zip -qr \"%s\" \"%s\"" % (target, ' '.join(source)) if os.system(zip_command == 0): print('Success', target) return True else : print('Error') return False def connect(): print('Connect to '+ip) # 创建ssh实例对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 连接远程服务器 ssh.connect(hostname=ip, port=22, username=user, password=pwd) print('Connection succeed!') return ssh except: print('Connection failed!') return None # 关tomcat删除war包 def exec_commands(conn): print('Shutdown tomcat and remove war about...') try: cmd_option = 'cd /home/appmanager/xjld/'+tomcat_option + \ '/bin/;./shutdown.sh;rm -rf ../logs/catalina.out;rm -rf ../webapps/'+war_option+'*' stdin, stdout, stderr = conn.exec_command(cmd_option) results = stdout.read() print(results) print('Shutdown and removed success!') except: print('Shutdown and removed error!') print('=='*60) # 部署启动 def exec_deploy(conn): print('Startup tomcat and print log...') try: cmd_option = 'cd /home/appmanager/xjld/'+tomcat_option+'/bin/;./startup.sh;' cmd_check = 'tail -n 10 /home/appmanager/xjld/' + \ tomcat_option+'/logs/catalina.out;' conn.exec_command(cmd_option) time.sleep(16) stdin, stdout, stderr = conn.exec_command(cmd_check) results = stdout.read() print(results) print('Startup tomcat success!') except: print('Startup tomcat error!') print('=='*60) # 文件上传 def upload(conn, local_path, target_path): print('Uploading...') try: sftp = conn.open_sftp() sftp.put(local_path, target_path) print('War package uploaded to '+target_path) except: print('Upload failed, trying again...') sftp.put(local_path, target_path) sftp.close() print('=='*60) # 文件下载 def download(conn, remote_path, local_path): print('Downloading...') try: sftp = conn.open_sftp() if not os.path.exists(local_path): # 如果目标路径不存在原文件夹的话就创建 os.makedirs(local_path) print('create success') sftp.get(remote_path, local_path+'\\'+war_option+'.war') print('War package downloaded to '+local_path+'\\'+war_option+'.war') except: print('Download failed, trying again...') sftp.get(remote_path, local_path+'\\'+war_option+'.war') sftp.close() print('=='*60) def each_file(): # 提取配置文件到指定目录下 print('Start backup...') print('Unzip war package to start...') try: os.chdir('D:\\war_project\\'+war_option+'_war') os.popen('jar -xvf '+war_option+'.war') # 源配置文件 source_path = 'D:\\war_project\\'+war_option+'_war\\WEB-INF\\classes' # 配置文件的指定目录 target_path = r'D:\python_project\backups\resources' if not os.path.exists(target_path): # 如果目标路径不存在原文件夹的话就创建 os.makedirs(target_path) print('create success') if os.path.exists(source_path): # 如果目标路径存在原文件夹的话就先删除 shutil.rmtree(target_path) print('remove success') shutil.copytree(source_path, target_path) print('Backuped configuration file success') except: print('Backuped error!') print('=='*60) def replace(pro_config, svn_config): # 将生产环境配置文件移动到项目中 print('Removed and moved...') """ :param path: 目的 :type f1: 待移动 """ try: delDir = setting['dist']+'\\src\\main\\resources\\' if os.path.exists(delDir): shutil.rmtree(delDir) # 如有有删除指定目录 print(delDir + 'was removed!') if os.path.exists(pro_config): shutil.move(pro_config, svn_config) print('Moved success!') except: print('Removed or moved error!') print('=='*60) def generate_war(arg): # 打出war包 print('Packing '+war_name+'.war') try: os.system('mvn -B -f '+setting['dist']+' clean package') print('Packed Success!') except: print('Packed error!') print('=='*60) def rename_war(abefore_war_name, after_war_name): # 重命名 print('Rename name of war file...') if os.path.exists(before_war_name): os.rename(before_war_name, after_war_name) print('Rename success!') else: print('No such file') if __name__ == '__main__': url = sys.argv[3] arr = url.split('/') dist_info = 'D:\\python_project\\'+arr[5] setting = { 'svn': r'C:\Program Files\TortoiseSVN\bin', # svn的程序所在路径 'user': sys.argv[1], 'pwd': sys.argv[2], 'url': url, 'dist': dist_info, # 检出目标地址 } dist = setting['dist'] setting['dist'] = dist+'_' + \ time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime()) os.chdir(setting['svn']) checkout() pro_config = r'D:\python_project\backups\resources' # 待移动 svn_config = setting['dist']+'\\src\\main\\resources' # 目的 print('Connect to remote server...') ip = raw_input('Input your ip:') user = raw_input('Input your user:') pwd = raw_input('Input your password:') tomcat_option = raw_input('Input the Tomcat you want to operate:') war_option = raw_input('Input the war file you want to operate:') down_remote_path = '/home/appmanager/xjld/' + \ tomcat_option+'/webapps/'+war_option+'.war' down_local_path = 'D:\\war_project\\'+war_option+'_war' download(connect(), down_remote_path, down_local_path) each_file() replace(pro_config, svn_config) war_name = raw_input('Input name of war file:') generate_war(arr[5]) exec_commands(connect()) before_war_name = setting['dist']+'\\target\\'+arr[5]+'-0.0.1-SNAPSHOT.war' after_war_name = setting['dist']+'\\target\\'+war_name+'.war' up_target_path = '/home/appmanager/xjld/' + \ tomcat_option+'/webapps/'+war_name+'.war' rename_war(before_war_name, after_war_name) upload(connect(), after_war_name, up_target_path) exec_deploy(connect()) print('End of auto deployment operation!') __mai
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~