Python批量Git Pull,对文件夹批量进行Pull操作

效果展示

在这里插入图片描述

说明

  1. 本来是想写的完善一些,但由于是自用,所以写出来后发现已经解决了自己的问题,所有 2和3功能没有写。

  2. 执行的话,需要 cmd 之后 直接 Python BatchGitPull.py 运行下面代码即可。

  3. 里面同时涉及到其他Pyhon知识点(写给自己的,因为自己老记不住):
    1. 输入任意键退出控制台
    2. 控制台输出不同颜色
    3. 获取命令执行后的返回结果
    4. 根据不同的输入执行不同的代码
    5. 获取用户管理员权限,从而刷新系统DNS
    6. …

  4. 注意:is_admin 这个访问是来判断是否有管理员权限的,如果担心代码有问题,可以去掉管理员权限的相关代码。我是因为个人情况,不加的话,无法进行系统DNS的刷新,导致有时候梯子换了频道后,还是Pull不下来,所以出此下策。

具体代码

#!/usr/bin/python
# -*- coding:utf-8 -*-
import os
import time
import ctypes
import sys
import subprocess
import colorama
from colorama import Fore, Styledef is_admin():try:return ctypes.windll.shell32.IsUserAnAdmin()except:return Falsedir_root = 'N:/Program Files/sd-webui-aki-v4.4/ComfyUI/ComfyUI/custom_nodes'def PrintError(log):print(Fore.RED + log + Style.RESET_ALL)  # 红色def PrintSuccess(log):print(Fore.GREEN + log + Style.RESET_ALL)  # 绿色def BatchPull():dir_route = dir_rootif os.path.exists(dir_route) == False:PrintError("没有这个文件夹 " + dir_root)return# 切换到test目录os.chdir(dir_route)current_directory = os.getcwd()dirs = os.listdir()# 定义git命令command = 'git pull'  # origin master'netCommand = 'ipconfig/flushdns'index = 0error_list = {}for code_dir in dirs:index += 1# 拼接路径(当前目录+代码目录)# os.system(netCommand)# 使用 subprocess.runresult = subprocess.run(netCommand, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True)# 获取标准输出# 获取标准错误输出(如果有)if result.stderr:PrintError("网络错误输出:" + result.stderr)else:print("刷新网络成功!")  # + result.stdout)full_path = os.path.join(current_directory, code_dir)if os.path.isdir(full_path) == False:print("跳过:不是文件夹 " + full_path)continueos.chdir(full_path)print(str(index) + " : 进行 Pull " + code_dir)# os.system(command)result = subprocess.run(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, shell=True)waitTimer = 2# 获取标准错误输出(如果有)if result.stderr:waitTimer *= 2PrintError("错误输出:" + result.stderr)error_list[index] = code_direlse:PrintSuccess("完成输出:" + result.stdout)time.sleep(waitTimer)# print(code_dir + " Pull完毕! " + full_path + '\n')os.chdir(dir_route)if len(error_list) > 0:for err in error_list:PrintError("未完成列表:" + err + " : " + error_list[err])else:PrintSuccess("完美!全部更新成功!!")input("按回车键退出...")project_addr = ['git@gitlab.com:project/mengxixing-h5.git','git@gitlab.com:project/waterinbrainopendomain.git','git@gitlab.com:project/waterinbrain.git'
]def BatchClone():os.mkdir('E:/code')os.chdir('E:/code')command = 'git clone 'for i in project_addr:os.popen(command + str(i))time.sleep(1)print(i + " Clone完毕!")print('当前项目组已全部拉取完毕')# BatchPull()if is_admin():# 初始化coloramacolorama.init()PrintSuccess("测试")user_input = input("将对 \" " + dir_root + " \" 文件夹下所有子文件执行批量Git操作,请确定路径正确。\n\n" +"请选择操作方式: \n1. 按1键 则全部执行Pull,获取最新代码。\n2. 按2键 则只执行Pull失败的库 " +"\n3. 按3键 暂时未开发\n \n \n 注意:\n1. 只有当1键执行后才会有Pull错误数据,这时候2键才有效果\n2. 按键后,再按回车键来确定\n" +"___________________________________________\n")if user_input == "1":BatchPull()elif user_input == "2":print("执行了B操作")elif user_input == "3":input("暂未任何操作,按回车键退出...")else:input("无效输入,按回车键退出...")else:ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, " ".join(sys.argv), None, 1)

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

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

相关文章

面向对象编程的艺术:构建高效可扩展的软件

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

有道翻译取消划词搜索及AI图标

安装了有道翻译后,只要选中内容就会弹出搜索框,让人十分烦躁,分享一下如何关闭此功能。 1)关闭划词功能 打开有道翻译软件,取消划词,取词的勾选即可 2)关闭ai图标 1:打开设置 2:点击AIBox 3:关…

Asp.Net Core Web Api内存泄漏问题

背景 使用Asp.Net Core Web Api框架开发网站中使用到了tcp socket通信,网站作为服务端开始tcp server,其他的客户端不断高速给它传输信息时,tcp server中读取信息每次申请的byte[]没有得到及时的释放,导致内存浪费越来越多&#…

反序列化漏洞详解(一)

目录 一、php面向对象 二、类 2.1 类的定义 2.2 类的修饰符介绍 三、序列化 3.1 序列化的作用 3.2 序列化之后的表达方式/格式 ① 简单序列化 ② 数组序列化 ③ 对象序列化 ④ 私有修饰符序列化 ⑤ 保护修饰符序列化 ⑥ 成员属性调用对象 序列化 四、反序列化 …

CentOS系统环境搭建(二十二)——Git进阶

centos系统环境搭建专栏🔗点击跳转 文章目录 Git进阶1.更新代码2.只拉取Git仓库的部分目录内容2.1初始化空白仓库2.2配置git仓库2.3开启稀疏检出属性2.4设置指定拉取的目录2.5 更新代码 Git进阶 1.更新代码 基于上一篇文章CentOS系统环境搭建(二十一&…

Pytest做性能测试?

Pytest其实也是可以做性能测试或者基准测试的。是非常方便的。 可以考虑使用Pytest-benchmark类库进行。 安装pytest-benchmark 首先,确保已经安装了pytest和pytest-benchmark插件。可以使用以下命令安装插件: pip install pytest pytest-benchmark …

如何快速选出一支好股票?

俗话说得好:股票选得好,收益少不了!不用多说,相信大伙儿都知道选一支好股票究竟有多重要。 但是选股可不像咱们去菜市场买菜一样,看着顺眼就成。选股,其实是一个专业性特别强的技术活儿。 目前最常用的选股…

常见电子元器件封装形式

1.TO(晶体管外形封装) 2.DIP(双列封装) 3.SOT(小型晶体管) 4.SOP(小型封装) 5.SOIC(小型IC) 6.SIP(单列直插封装) 7.LCC(带…

Maven的安装和使用

Maven是一个基于项目对象模型(POM),可以管理项目构建、依赖管理、项目报告等的工具,使构建Java项目更容易。可以说Maven是一个项目管理和构建工具,它可以从管理项目的角度出发,将开发过程中的需求纳入进来&…

Quirks(怪癖)模式是什么?它和 Standards(标准)模式有什么区别?

前言: "Quirks模式"和"Standards模式"是与HTML文档渲染模式相关的两种模式。它们影响着浏览器如何解释和渲染HTML和CSS。理解它们之间的区别对于前端开发者和网页设计师来说是至关重要的。本文将深入讨论Quirks模式和Standards模式的区别,以及它…

​iOS Class Guard github用法、工作原理和安装详解及使用经验总结

iOS Class Guard是一个用于OC类、协议、属性和方法名混淆的命令行工具。它是class-dump的扩展。这个工具会生成一个symbol table,这个table在编译期间会包含进工程中。iOS-Class-Guard能有效的隐藏绝大多数的类、协议、方法、属性和 实例变量 名。 iOS-Class-Guard不…

.Net core 6.0 升8.0

1 Update Visual Studio 2 3 用Nutget 更新不同套件版本 更新后结果如下: