python的零碎知识
1.Python代码操作git
安装
pip3 install gitpython
操作git
import os
from git.repo import Repo # gitpython def clone():
download_path = os.path.join('codes', 'fuck') # git clone -b master https://gitee.com/wupeiqi/xxoo.git
# git clone -b v1 https://gitee.com/wupeiqi/xxoo.git
Repo.clone_from('https://gitee.com/wupeiqi/xxoo.git', to_path=download_path, branch='master') def pull():
# git pull origin master
local_path = os.path.join('codes', 'fuck')
repo = Repo(local_path)
repo.git.pull() def tag_list():
local_path = os.path.join('codes', 'fuck')
repo = Repo(local_path)
tag_list = [item.name for item in repo.tags]
print(tag_list) def commits_list():
import json
local_path = os.path.join('codes', 'fuck')
repo = Repo(local_path)
commit_log = repo.git.log('--pretty={"commit":"%h","author":"%an","summary":"%s","date":"%cd"}',date='format:%Y-%m-%d %H:%M',max_count=50) commit_list = [json.loads(item) for item in commit_log.split('\n') ]
print(commit_list) def branches_list():
pull()
local_path = os.path.join('codes', 'fuck')
repo = Repo(local_path) branches = repo.remote().refs
branch_list = [item.remote_head for item in branches if item.remote_head != "HEAD"] def checkout_to_branch(branch='dev'):
local_path = os.path.join('codes', 'fuck')
repo = Repo(local_path) # before = repo.git.branch()
# print('当前所在分支:',before) repo.git.checkout(branch) # after = repo.git.branch()
# print('当前所在分支:',after) def checkout_to_commit(commit='ec1d728'):
# commits_list()
local_path = os.path.join('codes', 'fuck')
repo = Repo(local_path)
repo.git.reset('--hard', commit)
封装到一个类中,以后当做工具。
import os
import json
from git.repo import Repo
from git.repo.fun import is_git_dir class GitRepository(object):
"""
git仓库管理
""" def __init__(self, local_path, repo_url, branch='master'):
#本地存储代码的路径 E:\Django_issue\code_issue\codes\xxx
self.local_path = local_path
#远程仓库地址 https://gite.com/zhanyu/xxx.git
self.repo_url = repo_url
# 这个默认为空下边自动赋值
self.repo = None
# 调用下边的方法
self.initial(branch) def initial(self,branch):
"""
初始化git仓库
:param repo_url:
:param branch:
:return:
"""
# 判断本地的仓库中有没有文件,没有就创建
if not os.path.exists(self.local_path):
os.makedirs(self.local_path)
# codes/luffycity/.git
git_local_path = os.path.join(self.local_path, '.git')
# 用来判断是不是有这个文件
if not is_git_dir(git_local_path):
# 第一次拉文件的时候是需要克隆的,不能直接拉取
self.repo = Repo.clone_from(self.repo_url, to_path=self.local_path, branch=branch)
else:
# 如果有这个.git文件就实例化Repo这个类;
self.repo = Repo(self.local_path) def pull(self):
"""
从线上拉最新代码
:return:
"""
self.repo.git.pull() def branches(self):
"""
获取所有分支
:return:
"""
branches = self.repo.remote().refs
return [item.remote_head for item in branches if item.remote_head not in ['HEAD', ]] def commits(self):
"""
获取所有提交记录
:return:
"""
commit_log = self.repo.git.log('--pretty={"commit":"%h","author":"%an","summary":"%s","date":"%cd"}',
max_count=50,
date='format:%Y-%m-%d %H:%M')
return [json.loads(item) for item in commit_log.split('\n') ] def tags(self):
"""
获取所有tag
:return:
"""
return [tag.name for tag in self.repo.tags] def change_to_branch(self, branch):
"""
切换分值
:param branch:
:return:
"""
self.repo.git.checkout(branch) def change_to_commit(self, branch, commit):
"""
切换commit
:param branch:
:param commit:
:return:
"""
self.change_to_branch(branch=branch)
self.repo.git.reset('--hard', commit) def change_to_tag(self, tag):
"""
切换tag
:param tag:
:return:
"""
self.repo.git.checkout(tag) if __name__ == '__main__':
local_path = os.path.join('codes', 'luffycity')
repo_object = GitRepository(local_path, 'https://gitee.com/wupeiqi/xxoo.git')
2.解压缩文件
import shutil
# 压缩文件: py2、py3
"""
abs_file_path = shutil.make_archive(
base_name="files/ww", # 压缩包文件路劲
format='tar', # “zip”, “tar”
root_dir='codes/luffycity' # 被压缩的文件目录
)
print(abs_file_path)
"""
# 解压缩:py3
# shutil._unpack_zipfile('files/ww.zip', 'xxxxxx/new')
# shutil._unpack_tarfile('files/ww.zip', 'xxxxxx/new')
# 解压缩:py2/py3
"""
import zipfile
z = zipfile.ZipFile('files/ww.zip', 'r')
z.extractall(path='xxxxxx/luffy')
z.close()
import tarfile
tar = tarfile.TarFile('code/www.tar', 'r')
tar.extractall(path='/code/x1/') # 可设置解压地址
tar.close()
"""
3.基于paramiko操作远程服务器
import paramiko
class SSHProxy(object):
def __init__(self, hostname, port, username, private_key_path):
self.hostname = hostname
self.port = port
self.username = username
self.private_key_path = private_key_path
self.transport = None
def open(self):
private_key = paramiko.RSAKey.from_private_key_file(self.private_key_path)
self.transport = paramiko.Transport((self.hostname, self.port))
self.transport.connect(username=self.username, pkey=private_key)
def close(self):
self.transport.close()
def command(self, cmd):
ssh = paramiko.SSHClient()
ssh._transport = self.transport
stdin, stdout, stderr = ssh.exec_command(cmd)
result = stdout.read()
ssh.close()
return result
def upload(self, local_path, remote_path):
sftp = paramiko.SFTPClient.from_transport(self.transport)
sftp.put(local_path, remote_path)
sftp.close()
def __enter__(self):
self.open()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.close()
if __name__ == '__main__':
with SSHProxy('10.211.55.25', 22, 'root', '/Users/wupeiqi/.ssh/id_rsa') as proxy:
proxy.upload('xx','xx')
proxy.command('ifconfig')
proxy.command('ifconfig')
proxy.upload('xx', 'xx')
with SSHProxy('10.211.55.26', 22, 'root', '/Users/wupeiqi/.ssh/id_rsa') as proxy:
proxy.upload('xx','xx')
proxy.command('ifconfig')
proxy.command('ifconfig')
proxy.upload('xx', 'xx')
4.本地执行命令
import subprocess
result = subprocess.check_output('dir', cwd='D:\wupeiqi\code\ziwen\codes', shell=True)
print(result.decode('gbk'), type(result))
python的零碎知识的更多相关文章
- 【Python】 零碎知识积累 II
[Python] 零碎知识积累 II ■ 函数的参数默认值在函数定义时确定并保存在内存中,调用函数时不会在内存中新开辟一块空间然后用参数默认值重新赋值,而是单纯地引用这个参数原来的地址.这就带来了一个 ...
- 【Python】 零碎知识积累 I
大概也是出于初高中时学化学,积累各种反应和物质的习惯,还有大学学各种外语时一看见不认识的词就马上记下来的习惯,形成了一种能记一点是一点的零碎知识记录的癖好.这篇文章就是专门拿来记录这些零碎知识的,没事 ...
- python之零碎知识
一 join方法 主要是做字符串的拼接:join后面跟的类型必须是要可迭代得到对象 for循环的对象是可迭代对象 # result = "".join(li) # print(re ...
- python数组相关知识
1.np中的reshape函数,可以把矩阵重新划分成m行n列. arange(n)可以把 [0,n-1]装入数组中,一定要注意的是img.reshape()并不会改变原来的数组,所以需要另外新建一个数 ...
- Python 编程核心知识体系(REF)
Python 编程核心知识体系: https://woaielf.github.io/2017/06/13/python3-all/ https://woaielf.github.io/page2/
- python基础----基础知识介绍
一 编程语言的划分 编译型:将代码一次性全部编译成二进制,然后运行. 缺点:开发效率低,不能跨平台(windows与linux) 优点:执行效率高 代表语言:c语言 解释型:当程序开始运 ...
- 简述Python入门小知识
如今的Python开发工程师很受企业和朋友们的青睐,现在学习Python开发的小伙伴也很多,本篇文章就和大家探讨一下Python入门小知识都有哪些. 扣丁学堂简述Python入门小知识Python培训 ...
- Python数据挖掘——基础知识
Python数据挖掘——基础知识 数据挖掘又称从数据中 挖掘知识.知识提取.数据/模式分析 即为:从数据中发现知识的过程 1.数据清理 (消除噪声,删除不一致数据) 2.数据集成 (多种数据源 组合在 ...
- python - 那些零碎的知识点
python - 那些零碎的知识点 一. 字符串格式化 1. "旧式字符串解析(%操作符)" 'Hello, %s' % name "Hello, Bob" ' ...
随机推荐
- MyBatisPlus-常用注解
一.@TableName 映射数据库的表名 package com.md.entity; import com.baomidou.mybatisplus.annotation.*; import co ...
- TP学习—第一天:框架的简单学习;创建应用;
一.框架目录文件的介绍 common 核心函数库目录 conf 框架的核心配置文件 lang 语言包目录 library 核心资源库目录 tpl 不用管,就是几个模板 Thin ...
- AWVS批量导入网站(刷漏洞入门)
今天整了一天这个AWVS批量扫描脚本,主要是下了好几个版本的AWVS,都不稳定,一次次删除又一次次安装. 做这件事儿目的就是为了批量刷漏洞,不过弄好之后又不打算刷漏洞了,不太喜欢无脑刷漏洞,没什么意义 ...
- 图解JanusGraph系列 - 关于JanusGraph图数据批量快速导入的方案和想法(bulk load data)
大家好,我是洋仔,JanusGraph图解系列文章,实时更新~ 图数据库文章总目录: 整理所有图相关文章,请移步(超链):图数据库系列-文章总目录 源码分析相关可查看github(码文不易,求个sta ...
- ASP.NET Core 3.1使用Swagger API接口文档
Swagger是最流行的API开发工具,它遵循了OpenAPI规范,可以根据API接口自动生成在线文档,这样就可以解决文档更新不及时的问题.它可以贯穿于整个API生态,比如API的设计.编写API文档 ...
- Linux(Centos7)安装、使用 Docker
一.Linux(CentOS7) 上安装 docker 1.docker 是什么? docker 是一种 虚拟化容器技术,一个开源的应用容器引擎. 基于镜像,可以秒级启动各种容器(运行一次镜像就生成一 ...
- 一次失败的java Box居中尝试
效果如下: 通过Box的应该虽然实现了居中,但是页面相当丑!且不能插入JTextField等文本框,总的来说相当失败!!! import javax.swing.Box; import javax.s ...
- js表单简单验证(手机号邮箱)
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncod ...
- Linux 网卡 bonding配置
网卡 bonding配置 目录 网卡 bonding配置 一.bonding技术 bonding的七种工作模式 总结: 二.Centos7配置bonding 1.关闭和停止NetworkManager ...
- ROS开源小车TurtleBot3详情介绍(Burger)
您为什么要选择ROS开源智能小车 ROS(RobotOperating System,机器人操作系统)是目前世界上更主流更多人使用的的机器人开源操作系统.它可以提供操作系统应有的服务,包括硬件抽象,底 ...