python写了个小软件,用于创建临时代码仓,并用pycharm打开
import os import ctypes import logging import tempfile from functools import lru_cache from tkinter import * from glob import glob import subprocess as sp from threading import Thread from datetime import datetimectypes.windll.shcore.SetProcessDpiAwareness(True) logging.basicConfig(level=logging.DEBUG)def download_repo(repo_link, temp_folder=None, branch='master'):temp_folder = temp_folder or tempfile.TemporaryDirectory()tf_name = temp_folder if type(temp_folder) is str else temp_folder.nameproject_name = repo_link.split('/')[-1].rstrip('.git') # 提取项目名称logging.debug(f'项目名称提取:{project_name}')# 本地项目顶层目录路径repo_folder = os.path.join(tf_name, f'{project_name}_{branch}_{datetime.now().strftime("%m_%d_%H_%M")}')logging.info(f'临时项目储存目录:{repo_folder}')logging.info(f'分支:{branch}')p = sp.Popen(['git', 'clone', repo_link, repo_folder.replace('\\', '/'), '-b', branch,],)p.wait()return repo_folder@lru_cache(maxsize=8) def get_pycharm_cmd():possibles = [r"C:\Program Files\JetBrains\PyCharm*\bin\pycharm.bat",r'C:\**\JetBrains\PyCharm*\bin\pycharm.bat',r'C:\**\pycharm.bat',r'D:\**\pycharm.bat',]for path in possibles:result = glob(path, recursive=True)logging.debug(f'搜索pycharm.bat路径:{path}\n结果:{result}')if result:return result[0]def open_in_pycharm(project_folder):p = sp.Popen([get_pycharm_cmd(), project_folder],)p.wait()def main():r = Tk()default_title = '创建临时仓库'r.title(default_title)r.geometry('600x100+1000+500')info_frame = Frame(r)info_frame.pack(side=TOP, fill=BOTH, expand=True)info_frame.columnconfigure(1, weight=1)for i in range(3):info_frame.rowconfigure(i, weight=1)Label(info_frame, text='仓库链接').grid(row=0, column=0, sticky='swen')Label(info_frame, text='分支').grid(row=1, column=0, sticky='swen')Label(info_frame, text='存放目录').grid(row=2, column=0, sticky='swen')es = []for i in range(3):es.append(Entry(info_frame, ))for index, e in enumerate(es):e.grid(row=index, column=1, sticky='swen')# 填写默认分支es[1].insert(0, 'master')# 填写临时目录temp_folder = tempfile.TemporaryDirectory()es[2].insert(0, temp_folder.name)def start():r.title('克隆仓库中')repo_folder = download_repo(es[0].get(), branch=es[1].get(), temp_folder=es[2].get())r.title('打开仓库中')open_in_pycharm(repo_folder)r.title(default_title)b = Button(r, text='开始', command=Thread(target=start, daemon=True).start)b.pack(side=BOTTOM, fill=X)r.mainloop()if __name__ == '__main__':main()
