通过Python脚本git pull 自动重试拉取代码

简介: 通过Python脚本git pull 自动重试拉取代码

【需求】
由于网络等原因,拉取GitHub 仓库代码失败, 自动重试拉取

【脚本】


# -*- coding: utf-8 -*-
#!/usr/bin/python3

"""
pip3 install pexpect
"""

import pexpect
import os
import sys

time = 1
username = 'infuq'
password = 'qwert#123'


def retry():
    global time
    print('invoke retry %s time' % time)
    time = time + 1

    # 进入到仓库目录
    os.chdir('/home/infuq/Repository/infuq-others')

    # 执行拉取
    spawner = pexpect.spawn('git pull', encoding='utf-8')
    spawner.logfile = sys.stdout

    try:
        i = spawner.expect(['Already up to date', 'Username']) # ,timeout = 10

        # 不需要输入用户名和密码的场景
        if i == 0:
            spawner.close()
            return

        # 需要输入用户名和密码的场景
        elif i == 1:
            # 输入用户名
            spawner.sendline(username)
            i = spawner.expect(['Password']) # ,timeout = 10
            if i == 0:
                # 输入密码
                spawner.sendline(password)
                i = spawner.expect(pexpect.EOF)
                if i == 0:
                    spawner.close()

                    status = spawner.status
                    exit_status = spawner.exitstatus
                    signal_status = spawner.signalstatus
                    # 正常退出场景
                    if exit_status == 0:                        
                        return
                    else:
                        # 异常退出场景, 重试
                        retry()
                else:
                    # 异常退出场景, 重试
                    retry()
            else:
                # 未出现输入密码的提示, 重试
                retry()
        else:
            # 未出现输入用户名的提示, 重试
            retry()
    except Exception:
        # 出现异常, 重试
        retry()

if __name__ == '__main__':
    retry()

【执行脚本】

[infuq tmp]# python3 retry_pull.py
invoke retry 1 time
fatal: unable to access 'https://github.com/infuq/infuq-others.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
invoke retry 2 time
fatal: unable to access 'https://github.com/infuq/infuq-others.git/': Empty reply from server
invoke retry 3 time
invoke retry 4 time
invoke retry 5 time
invoke retry 6 time
invoke retry 7 time
invoke retry 8 time
invoke retry 9 time
invoke retry 10 time
invoke retry 11 time
invoke retry 12 time
invoke retry 13 time
invoke retry 14 time
fatal: unable to access 'https://github.com/infuq/infuq-others.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
invoke retry 15 time
fatal: unable to access 'https://github.com/infuq/infuq-others.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
invoke retry 16 time
invoke retry 17 time
invoke retry 18 time
invoke retry 19 time
invoke retry 20 time
invoke retry 21 time
invoke retry 22 time
invoke retry 23 time
invoke retry 24 time
invoke retry 25 time
invoke retry 26 time
fatal: unable to access 'https://github.com/infuq/infuq-others.git/': Empty reply from server
invoke retry 27 time
invoke retry 28 time
fatal: unable to access 'https://github.com/infuq/infuq-others.git/': Empty reply from server
invoke retry 29 time
invoke retry 30 time
invoke retry 31 time
invoke retry 32 time
invoke retry 33 time
invoke retry 34 time
invoke retry 35 time
invoke retry 36 time
invoke retry 37 time
invoke retry 38 time
invoke retry 39 time
invoke retry 40 time
invoke retry 41 time
invoke retry 42 time
Username for 'https://github.com': infuq
infuq
Password for 'https://infuq@github.com': qwert#123

remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/infuq/infuq-others
   4058745..fd0bc40  master     -> origin/master
Updating 4058745..fd0bc40
Fast-forward
 README.md | 1 -
 1 file changed, 1 deletion(-)

自动重试了 42 次, 拉取成功

目录
相关文章
|
3月前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
659 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
13天前
|
机器学习/深度学习 人工智能 PyTorch
200行python代码实现从Bigram模型到LLM
本文从零基础出发,逐步实现了一个类似GPT的Transformer模型。首先通过Bigram模型生成诗词,接着加入Positional Encoding实现位置信息编码,再引入Single Head Self-Attention机制计算token间的关系,并扩展到Multi-Head Self-Attention以增强表现力。随后添加FeedForward、Block结构、残差连接(Residual Connection)、投影(Projection)、层归一化(Layer Normalization)及Dropout等组件,最终调整超参数完成一个6层、6头、384维度的“0.0155B”模型
200行python代码实现从Bigram模型到LLM
|
13天前
|
机器学习/深度学习 算法 PyTorch
从零开始200行python代码实现LLM
本文从零开始用Python实现了一个极简但完整的大语言模型,帮助读者理解LLM的工作原理。首先通过传统方法构建了一个诗词生成器,利用字符间的概率关系递归生成文本。接着引入PyTorch框架,逐步重构代码,实现了一个真正的Bigram模型。文中详细解释了词汇表(tokenizer)、张量(Tensor)、反向传播、梯度下降等关键概念,并展示了如何用Embedding层和线性层搭建模型。最终实现了babyGPT_v1.py,一个能生成类似诗词的简单语言模型。下一篇文章将在此基础上实现自注意力机制和完整的GPT模型。
从零开始200行python代码实现LLM
|
1月前
|
数据采集 运维 API
把Postman调试脚本秒变Python采集代码的三大技巧
本文介绍了如何借助 Postman 调试工具快速生成 Python 爬虫代码,并结合爬虫代理实现高效数据采集。文章通过“跨界混搭”结构,先讲解 Postman 的 API 调试功能,再映射到 Python 爬虫技术,重点分享三大技巧:利用 Postman 生成请求骨架、通过 Session 管理 Cookie 和 User-Agent,以及集成代理 IP 提升稳定性。以票务信息采集为例,展示完整实现流程,探讨其在抗封锁、团队协作等方面的价值,帮助开发者快速构建生产级爬虫代码。
把Postman调试脚本秒变Python采集代码的三大技巧
|
22天前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
56 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
|
1月前
|
JavaScript 前端开发 持续交付
实际工作中 Git Commit 代码提交规范是什么样的?
实际工作中 Git Commit 代码提交规范是什么样的?
80 7
|
24天前
|
存储 机器学习/深度学习 人工智能
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
本文探讨了多模态RAG系统的最优实现方案,通过模态特定处理与后期融合技术,在性能、准确性和复杂度间达成平衡。系统包含文档分割、内容提取、HTML转换、语义分块及向量化存储五大模块,有效保留结构和关系信息。相比传统方法,该方案显著提升了复杂查询的检索精度(+23%),并支持灵活升级。文章还介绍了查询处理机制与优势对比,为构建高效多模态RAG系统提供了实践指导。
221 0
多模态RAG实战指南:完整Python代码实现AI同时理解图片、表格和文本
|
28天前
|
网络安全 开发工具 git
Git仓库创建与代码上传指南
本教程介绍了将本地项目推送到远程Git仓库的完整流程,包括初始化本地仓库、添加和提交文件、创建远程仓库、关联远程地址及推送代码。同时,还提供了`.gitignore`配置、分支管理等可选步骤,并针对常见问题(如认证失败、分支不匹配、大文件处理及推送冲突)给出了解决方案。适合初学者快速上手Git版本控制。
|
14天前
|
开发工具 git 索引
如何使用Git的暂存区来管理代码更改?
如何使用Git的暂存区来管理代码更改?
89 0
|
2月前
|
数据采集 数据可视化 大数据
Python入门修炼:开启你在大数据世界的第一个脚本
Python入门修炼:开启你在大数据世界的第一个脚本
99 6

推荐镜像

更多