自动批量初始化ros的git仓库并自动创建和上传到远程仓库

1. 概述

最近有个需求,把自己ros工程拆分多个子功能包模块后进行上传;但是功能包的数量太多了,几十个一个个点击太过痛苦,于是找找资料,想到使用catkin_tools、python、pexpect等工具实现了这个功能。

2. 代码

#!/usr/bin/env python
#coding=utf-8

import yaml
import sys, os
import subprocess
import pexpect

def adb_shell(cmd, type=0):
    # 执行cmd命令,并等待获取结果
    if type == 0:
        res = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # 使用管道
        result = res.stdout.read()  # 获取输出结果
        res.wait()  # 等待命令执行完成
        res.stdout.close() # 关闭标准输出
        return result
    # 不必获取结果,实时执行状态输出
    elif type == 1:
        res = os.system(cmd)
    else:
        print("please use true type!")

if __name__ == '__main__':
    catkin_list = adb_shell("catkin list")
    name_list = yaml.load(catkin_list)
    print(name_list)
    # 遍历列表并创建git仓库
    for packname in name_list:
        pack_path = adb_shell("catkin locate " + packname).split("\n")[0]
        print(pack_path) 
        # 1.初始化git仓库
        cmd = "cd {0} ; git init {0}; git add -A; git commit -m 'init';".format(pack_path)
        ret = adb_shell(cmd)
        print(ret)
        
        # 2.上传到gitlab仓库
        os.chdir(pack_path)                 # cd为shell自带的命令,当用which和whereis查找时都会报找不到
            # 自动创建远程git仓库
        child = pexpect.spawn("git push --set-upstream https://gitlab.example.com/namespace/{}.git  master".format(packname))
        child.logfile_read = sys.stdout
        child.expect("Username for")        # 匹配这一行的账户提示符,然后输入下一行的账户字符
        child.sendline("xxxxx@qq.com")  # 输入账户
    
        child.expect("Password for")        # 匹配这一行的密码提示符,然后输入下一行的密码字符
        child.sendline("xxxxx")      # 输入密码

        child.expect(pexpect.EOF)           # 结束符,正常结束这一次输入

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值