Python实现GitBook工具

写在前面

本工具是通过Python脚本实现 GitBook 自动 生成 执行 编译 发布的功能

你可以在这里下载exe

使用

1. exe下载,并移动位置

将exe文件放在你的gitbook文件夹中,或者放在空文件夹中

2. file.md

创建 名为file.md的文件,在你要写book的目录下

注意: 这里file.md文件名不可更改

3. 编辑文件内容

类似这样

01_JVM内存与垃概述.md
02_如何看术与JVM.md
03_为什学习JVM.md
04_面课程特点.md

4. 运行

gitbook-tools-21.4.18.exe

在这里插入图片描述

gitbook-tools-21.4.23.exe

在这里插入图片描述

5. 执行

1:生成md

运行这条选项会根据file.md每行的文本生成对应文件

在这里插入图片描述

并且在每个文件中自动加入 一级标题

在这里插入图片描述

现在就可以编写主要内容了

2: 转换SUMMARY

执行这条命令会根据file.md每行的文本生成

目录格式的 SUMMARY.md

生成后的文件如下

在这里插入图片描述

如果你可以自己写SUMMARY,这步可以忽略

3. 编译build

这步相当于

在终端直接敲

gitbook build

不同的是,如果你没有README文件,会自动创建

在这里插入图片描述

编译后,会在当前目录生成_book
文件夹,里面为编译后的HTML,可供发布或部署

4. git 指令

git add _book
git commit -m\"Commit by gitbook tool!!!\"
git push

这里 add 只是add了 _book 文件夹

commit的信息的固定的

push时,如果是已经clone下来自己的库,能够直接push

否则要先登录

5. gitee pages

gitee pages 部署,这个update

只有gitee pro 会员才能够 支持自动 更新

但是这里可以通过py提供了一些代码参考

先 tag一个 TODO

环境

Python: 3.7

GitBook CLI version: 2.3.2

GitBook version: 3.2.3

Node.js v15.8.0

npm@7.10.0

Pycharm 2021.3

Pyinstaller

Gitee Pages

Gitbook 介绍

GitBook 是一个基于 Node.js 的命令行工具,可使用 Github/Git 和 Markdown 来制作精美的电子书,GitBook 并非关于 Git 的教程。

Gitbook教程

安装遇到的问题

实现功能

  1. 生成md文件列表,通过读取文件,创建md文件

  2. 生成SUMMARY.md 替换文件名 为 Gitbook的SUMMARY格式

  3. build 编译gitbook ,html格式以便发布

  4. git 自动 push _book文件夹

  5. gitee pages 自动update(dev)

代码

'''
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by victor
# Created Time: '2021/4/17 0:42'
''''''
version: 21.4.18
TODO :         gitee pages auto sync!!!
'''
import os
# import sys
# import re# dir 是全路径
# 比如: E:\Projects\PycharmProjects\untitled\test\database\redis\2019-09-25-deepin-install-redis.md
# :param dir:
# :return:
class GitbookTool:def __init__(self):self.sum_file_name = "file.md"# 当前脚本目录# self.pypath = sys.path[0]# self.pypath = os.getcwd()self.pypath = input("please input the root path(windows split symbol is \\)\n:")# self.root_path = self.pypath# sour_path source 源 路径self.sour_path = self.pypath + "\\" + self.sum_file_name# SUMMARY.md 路径self.summary_path = self.pypath + "\\" + "SUMMARY.md"print("| self.pypath >>> ",self.pypath)def repSpilt(self, path):"""替换路径分隔符:param path::return:"""return path.replace("\\", "\\\\")def newFile(self, line, dirname):'''创建文件:param line::param dirname::return:'''print("| gen file >>>")# 新建文件的文件名,最后的\n去掉newName = dirname + "\\" + line[:-1]print("| \t", line[:-1])with open(newName, "w", encoding="utf-8") as f2:f2.write("# " + line[:-4])def for_line(self, file):'''读取 sm文件,并遍历行:param file::return:'''# 获取目录dirname = os.path.dirname(file)with open(file, "r", encoding="utf-8") as f1:i = 0for line in f1:if line == "\n":# line 是空行passelse:# 判断line是不是最后一行if line[-1] != "\n":# 加上换行line += "\n"i += 1self.newFile(line, dirname)print("| gen ", i, "file success!!!")print("| path:", dirname)def gen_md(self):"""生成md文件:return:"""# 获取输入print("| -----------------------------------------------------")print("| md文件生成器")print("| 通过读取file.md文件中的行数来创建文件")print("| 生成的文件会和源文件同目录")print("| 注意:原有文件会被替换")# print("| 请输入源目录文件路径,window用 \ 来分隔文件夹")# sourceFile = input(":")# E:\Projects\PycharmProjects\untitled\newFile# sourceFile = self.pypath + "\\" + "SUMMARY.md"self.for_line(self.repSpilt(self.sour_path))os.system('pause')def gitbook_build(self):'''编译gitbook:return:'''# fname = self.pypath + +"\\"+"SUMMARY.md"# os.path.isfile(fname)rname = self.pypath + "\\" + "README.md"# print("rname >>> ",rname)if os.path.isfile(rname):# 文件存在passelse:with open(rname, "w", encoding="utf-8") as f2:f2.write("This file is generated by py script!!!\n")f2.write("Please write the contents of the README.md")print("| building...")os.chdir(self.pypath)os.system("gitbook build")os.system('pause')def replace_sum(self):with open(self.sour_path, "r", encoding="utf-8") as f1, open(self.summary_path, "w", encoding="utf-8") as f2:i = 0for line in f1:if line == "\n":# line 是空行passelse:# 判断line是不是最后一行i += 1if line[-1] != "\n":# 加上换行line += "\n"f2.write("- [")f2.write(line[:-4])f2.write("](")f2.write(line[:-1])f2.write(")")f2.write("\n")print("| gen summary success!!!")print("| total effect line:",i)os.system('pause')def qucik_git(self):os.chdir(self.pypath)os.system("git add _book")os.system("git commit -m\"Commit by gitbook tool!!!\"")os.system("git push")os.system('pause')def menu(self):# 获取输入# print("| =========================================")# print("| ================ gitbook tools ================")print("| --------------------------- gitbook tools ---------------------------")print("| 1:生成md")print("| 2: 转换SUMMARY")print("| 3: 编译>HTML")print("| 4: 发布Git")print("| 0: exit()")print("| --------------------------- gitbook tools ---------------------------")return input("| choose operation you need:")if __name__ == '__main__':yt = '''┌─┐       ┌─┐ + +┌──┘ ┴───────┘ ┴──┐++│                 ││       ───       │++ + + +███████───███████ │+│                 │+│       ─┴─       ││                 │└───┐         ┌───┘│         ││         │   + +│         ││         └──────────────┐│                        ││                        ├─┐│                        ┌─┘│                        │└─┐  ┐  ┌───────┬──┐  ┌──┘  + + + +│ ─┤ ─┤       │ ─┤ ─┤└──┴──┘       └──┴──┘  + + + +神兽保佑代码无BUG!'''print(yt)print("| --------------------------- gitbook tools ---------------------------")print("| @version: 21.4.18")print("| @description: gitbook tools auto gen file & build & sync to git")print("| @author: victor")print("| @site: https://victorfengming.gitee.io/")print("| @introduce: https://victorfengming.gitee.io/comic/python-gitbook-tools/")print("| @readme: https://victorfengming.gitee.io/file/exe/gitbook-tools/readme.md")print("| @download: https://victorfengming.gitee.io/file/exe/gitbook-tools/gitbook-tools-21.4.18.exe")print("| --------------------------- gitbook tools ---------------------------")print("| 注意:使用前请将exe文件放到file.md同级目录下")# print("| ========================================")# print(os.path.isfile("E:\\Projects\\PycharmProjects\\untitled\\newFiletest\\12.md"))gt = GitbookTool()while True:cho = gt.menu()if cho == "1":print(1)gt.gen_md()elif cho == "2":print(2)gt.replace_sum()elif cho == "3":print(3)gt.gitbook_build()elif cho == "4":print(4)gt.qucik_git()elif cho == "0":# print("| bye~")exit(0)

gitee page 代码(dev)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait as Waitprint("start refresh gitee pages...")repo_user_name = "victorfengming"
repo_name = "shell"
login_user = "victorfengming"
login_pwd = "xxxx"url = "https://gitee.com/"+repo_user_name+"/"+repo_name+"/pages"driver = "E:\\chrome\\chromedriver.exe"
chrome_options = Options()
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--start-maximized")
chrome_options.add_argument("--headless")
browser=webdriver.Chrome(executable_path=driver, options=chrome_options)browser.get(url)Wait(browser, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "item.git-nav-user__login-item")))
print("load finish. url=" + url)
login_btn = browser.find_element_by_class_name("item.git-nav-user__login-item")
login_btn.click()Wait(browser, 10).until(EC.presence_of_element_located((By.ID, "user_login")))
Wait(browser, 10).until(EC.presence_of_element_located((By.ID, "user_password")))
print("login page load finish.")
user_input = browser.find_element_by_id("user_login")
pwd_input = browser.find_element_by_id("user_password")
login_btn = browser.find_element_by_name("commit")
user_input.send_keys(login_user)
pwd_input.send_keys(login_pwd)
login_btn.click()Wait(browser, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "button.orange.redeploy-button.ui.update_deploy")))
print("login finish.")
deploy_btn = browser.find_element_by_class_name('button.orange.redeploy-button.ui.update_deploy')browser.execute_script("window.scrollTo(100, document.body.scrollHeight);")
deploy_btn.click()
dialog = browser.switch_to.alert
dialog.accept()
print("refresh gitee pages finish.")
browser.close()

参考: https://www.jianshu.com/p/6460df84a099

https://blog.csdn.net/weixin_29981095/article/details/113987875

Pyinstaller

在这里插入图片描述

设置 运行参数

-F $FileNameWithoutExtension$.py

TODO

gitee pages 自动update(dev)

tkinter界面

附录源码

cmd 版本 (fix bug)

'''
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by victor
# Created Time: '2021/4/17 0:42'
''''''
version: 21.4.18
TODO :         gitee pages auto sync!!!
'''
import os
# import sys
# import re# dir 是全路径
# 比如: E:\Projects\PycharmProjects\untitled\test\database\redis\2019-09-25-deepin-install-redis.md
# :param dir:
# :return:
class GitbookTool:def __init__(self):self.sum_file_name = "file.md"# 当前脚本目录# self.pypath = sys.path[0]# self.pypath = os.getcwd()self.pypath = input("please input the root path(windows split symbol is \\)\n:")# self.root_path = self.pypath# sour_path source 源 路径self.sour_path = self.pypath + "\\" + self.sum_file_name# SUMMARY.md 路径self.summary_path = self.pypath + "\\" + "SUMMARY.md"print("| self.pypath >>> ",self.pypath)def repSpilt(self, path):"""替换路径分隔符:param path::return:"""return path.replace("\\", "\\\\")def newFile(self, line, dirname):'''创建文件:param line::param dirname::return:'''print("| gen file >>>")# 新建文件的文件名,最后的\n去掉newName = dirname + "\\" + line[:-1]print("| \t", line[:-1])with open(newName, "w", encoding="utf-8") as f2:f2.write("# " + line[:-4])def for_line(self, file):'''读取 sm文件,并遍历行:param file::return:'''# 获取目录dirname = os.path.dirname(file)with open(file, "r", encoding="utf-8") as f1:i = 0for line in f1:if line == "\n":# line 是空行passelse:# 判断line是不是最后一行if line[-1] != "\n":# 加上换行line += "\n"i += 1self.newFile(line, dirname)print("| gen ", i, "file success!!!")print("| path:", dirname)def gen_md(self):"""生成md文件:return:"""# 获取输入print("| -----------------------------------------------------")print("| md文件生成器")print("| 通过读取file.md文件中的行数来创建文件")print("| 生成的文件会和源文件同目录")print("| 注意:原有文件会被替换")# print("| 请输入源目录文件路径,window用 \ 来分隔文件夹")# sourceFile = input(":")# E:\Projects\PycharmProjects\untitled\newFile# sourceFile = self.pypath + "\\" + "SUMMARY.md"self.for_line(self.repSpilt(self.sour_path))os.system('pause')def gitbook_build(self):'''编译gitbook:return:'''# fname = self.pypath + +"\\"+"SUMMARY.md"# os.path.isfile(fname)rname = self.pypath + "\\" + "README.md"print("rname >>> ",rname)if os.path.isfile(rname):# 文件存在passelse:with open(rname, "w", encoding="utf-8") as f2:f2.write("This file is generated by py script!!!\n")f2.write("Please write the contents of the README.md")# bookignore = self.pypath + +"\\"+"SUMMARY.md"# os.path.isfile(fname)bookignore = self.pypath + "\\" + ".bookignore"if os.path.isfile(bookignore):# 文件存在 啥也不干passelse:with open(bookignore, "w", encoding="utf-8") as f2:f2.write("file.md")print("| building...")os.chdir(self.pypath)os.system("gitbook build")os.system('pause')def replace_sum(self):with open(self.sour_path, "r", encoding="utf-8") as f1, open(self.summary_path, "w", encoding="utf-8") as f2:i = 0for line in f1:if line == "\n":# line 是空行passelse:# 判断line是不是最后一行i += 1if line[-1] != "\n":# 加上换行line += "\n"f2.write("- [")f2.write(line[:-4])f2.write("](")f2.write(line[:-1])f2.write(")")f2.write("\n")print("| gen summary success!!!")print("| total effect line:",i)os.system('pause')def qucik_git(self):os.chdir(self.pypath)os.system("git add _book")os.system("git commit -m\"Commit by gitbook tool!!!\"")os.system("git push")os.system('pause')def menu(self):# 获取输入# print("| =========================================")# print("| ================ gitbook tools ================")print("| --------------------------- gitbook tools ---------------------------")print("| 1:生成md")print("| 2: 转换SUMMARY")print("| 3: 编译>HTML")print("| 4: 发布Git")print("| 0: exit()")print("| --------------------------- gitbook tools ---------------------------")return input("| choose operation you need:")if __name__ == '__main__':yt = '''┌─┐       ┌─┐ + +┌──┘ ┴───────┘ ┴──┐++│                 ││       ───       │++ + + +███████───███████ │+│                 │+│       ─┴─       ││                 │└───┐         ┌───┘│         ││         │   + +│         ││         └──────────────┐│                        ││                        ├─┐│                        ┌─┘│                        │└─┐  ┐  ┌───────┬──┐  ┌──┘  + + + +│ ─┤ ─┤       │ ─┤ ─┤└──┴──┘       └──┴──┘  + + + +神兽保佑代码无BUG!'''print(yt)print("| --------------------------- gitbook tools ---------------------------")print("| @version: 21.4.22")print("| @description: gitbook tools auto gen file & build & sync to git")print("| @author: victor")print("| @site: https://victorfengming.gitee.io/")print("| @introduce: https://victorfengming.gitee.io/comic/python-gitbook-tools/")print("| @readme: https://victorfengming.gitee.io/file/exe/gitbook-tools/readme.md")print("| @download: https://victorfengming.gitee.io/file/exe/gitbook-tools/gitbook-tools-21.4.22.exe")print("| --------------------------- gitbook tools ---------------------------")print("| 注意:使用前请将exe文件放到file.md同级目录下")# print("| ========================================")# print(os.path.isfile("E:\\Projects\\PycharmProjects\\untitled\\newFiletest\\12.md"))gt = GitbookTool()while True:cho = gt.menu()if cho == "1":print(1)gt.gen_md()elif cho == "2":print(2)gt.replace_sum()elif cho == "3":print(3)gt.gitbook_build()elif cho == "4":print(4)gt.qucik_git()elif cho == "0":# print("| bye~")exit(0)

图形Tk版本

main.py

# 导包
from tkinter import *
from tkinter import filedialog, messagebox
from gitbook_tools import GitbookTool'''| --------------------------- gitbook tools ---------------------------
| @version: 21.4.23
| @description: gitbook tools auto gen file & build & sync to git
| @author: victor
| @site: https://victorfengming.gitee.io/
| @introduce: https://victorfengming.gitee.io/comic/python-gitbook-tools/
| @readme: https://victorfengming.gitee.io/file/exe/gitbook-tools/readme.md
| @download: https://victorfengming.gitee.io/file/exe/gitbook-tools/gitbook-tools-21.4.23.exe
| --------------------------- gitbook tools ---------------------------
| TODO : 
|     1. 递归扫描md文件,根据相对路径 生成`SUMMARY.md`
|     2. cmd 日志 放入 tk页面 
|     5. gitee pages auto update by chrome tools 
| --------------------------- gitbook tools ---------------------------'''
class Tk_gui():def __init__(self, gt):'''初始化魔术方法用于设置界面的初始状态'''# 创建tkinter窗口self.root = Tk()# 设置窗口的标题self.root.title('Gitbook Tools')# 设置窗口的长和宽,最大值和最小值设置相同,用户不可调整窗口大小self.root.minsize(90, 180)self.root.maxsize(780, 180)self.gt = gtself.root_path = ""# 初始化# 初始化主要url# 调用主要逻辑执行函数self.main_logic()def main_logic(self):'''主业务逻辑:return:'''# 顶部信息栏topp = Frame()topp.grid(row=0, column=0)# 内容栏self.cont = Frame()self.cont.grid(row=1, column=0)# 输入选项操作self.indo = Frame()self.indo.grid(row=0, column=1, rowspan=2)# 状态栏self.stat = Frame()self.stat.grid(row=2, column=0)# self.get_path()self.put_button()# 加入主消息循环self.root.mainloop()# ## self.myStdout()  # 实例化重定向类# self.restoreStd()  # 恢复标准输出def put_button(self):'''用于绘制顶部菜单:param topp::return:'''# 菜单栏# print("| 1:生成md")# print("| 2: 转换SUMMARY")# print("| 3: 编译>HTML")# print("| 4: 发布Git")# print("| 0: exit()")self.gen_button("设置工作路径", self.get_path).grid(row=0, column=0)self.gen_button("生成md", lambda: self.button_run_before(gt.gen_md)()).grid(row=1, column=0)self.gen_button("转换SUMMARY", lambda: self.button_run_before(gt.replace_sum)()).grid(row=2, column=0)self.gen_button("编译>HTML", lambda: self.button_run_before(gt.gitbook_build)()).grid(row=3, column=0)self.gen_button("发布Git", lambda: self.button_run_before(gt.qucik_git)()).grid(row=4, column=0)def gen_button(self, text, method):'''生成 button:param text::param method::return:'''return Button(self.cont, text=text, command=method, width=22)def get_path(self):self.root_path = filedialog.askdirectory()print("getpath>>>",self.root_path)# 将路径 从 图形类 传入 工具类self.gt.pypath = self.root_path# cmd 消息 放入 tk页面 (dev)# def myStdout(self):  # 重定向类#     # 将其备份#     self.stdoutbak = sys.stdout#     self.stderrbak = sys.stderr#     # 重定向#     sys.stdout = self#     sys.stderr = self## def write(self, info):#     t = Text(self.cont)  # 创建多行文本控件#     t.pack()  # 布局在窗体上#     # info信息即标准输出sys.stdout和sys.stderr接收到的输出信息#     t.insert('end', info)  # 在多行文本控件最后一行插入print信息#     t.update()  # 更新显示的文本,不加这句插入的信息无法显示#     t.see(END)  # 始终显示最后一行,不加这句,当文本溢出控件最后一行时,不会自动显示最后一行## def restoreStd(self):#     # 恢复标准输出#     sys.stdout = self.stdoutbak#     sys.stderr = self.stderrbakdef button_run_before(self,func):# 判断# if func != self.get_path and self.root_path == "":if self.root_path == "":messagebox.showinfo('错误','请先设置工作路径')self.get_path()else:return func# print("| ========================================")
# print(os.path.isfile("E:\\Projects\\PycharmProjects\\untitled\\newFiletest\\12.md"))# gt = GitbookTool(input("please input the root path(windows split symbol is \\)\n:"))gt = GitbookTool()t = Tk_gui(gt)

gitbook_tools.py


'''
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Created by victor
# Created Time: '2021/4/17 0:42'
''''''
version: 21.4.18
TODO :         gitee pages auto sync!!!
'''
import os
# import sys
# import re# dir 是全路径
# 比如: E:\Projects\PycharmProjects\untitled\test\database\redis\2019-09-25-deepin-install-redis.md
# :param dir:
# :return:
class GitbookTool:def __init__(self):self.sum_file_name = "file.md"self.summary_file_name = "SUMMARY.md"self.readme_name = "README.md"# 当前脚本目录# self.pypath = sys.path[0]# self.pypath = os.getcwd()# self.pypath = input("please input the root path(windows split symbol is \\)\n:")self.pypath = ""# self.root_path = self.pypath# sour_path source 源 路径self.sour_path = self.pypath + "\\" + self.sum_file_name# SUMMARY.md 路径self.summary_path = self.pypath + "\\" + self.summary_file_nameprint("| self.pypath >>> ",self.pypath)def repSpilt(self, path):"""替换路径分隔符:param path::return:"""return path.replace("\\", "\\\\")def newFile(self, line, dirname):'''创建文件:param line::param dirname::return:'''print("| gen file >>>")# 新建文件的文件名,最后的\n去掉newName = dirname + "\\" + line[:-1]print("| \t", line[:-1])with open(newName, "w", encoding="utf-8") as f2:f2.write("# " + line[:-4])def for_line(self, file):'''读取 sm文件,并遍历行:param file::return:'''# 获取目录dirname = os.path.dirname(file)with open(file, "r", encoding="utf-8") as f1:i = 0for line in f1:if line == "\n":# line 是空行passelse:# 判断line是不是最后一行if line[-1] != "\n":# 加上换行line += "\n"i += 1self.newFile(line, dirname)print("| gen ", i, "file success!!!")print("| path:", dirname)def gen_md(self):"""生成md文件:return:"""# 获取输入print("| -----------------------------------------------------")print("| md文件生成器")print("| 通过读取file.md文件中的行数来创建文件")print("| 生成的文件会和源文件同目录")print("| 注意:原有文件会被替换")# print("| 请输入源目录文件路径,window用 \ 来分隔文件夹")# sourceFile = input(":")# E:\Projects\PycharmProjects\untitled\newFile# sourceFile = self.pypath + "\\" + "SUMMARY.md"sour_path = self.pypath + "\\" + self.sum_file_nameself.for_line(self.repSpilt(sour_path))# os.system('pause')def gitbook_build(self):'''编译gitbook:return:'''# fname = self.pypath + +"\\"+"SUMMARY.md"# os.path.isfile(fname)rname = self.pypath + "\\" + self.readme_nameprint("rname >>> ",rname)if os.path.isfile(rname):# 文件存在passelse:with open(rname, "w", encoding="utf-8") as f2:f2.write("This file is generated by py script!!!\n")f2.write("Please write the contents of the README.md")# bookignore = self.pypath + +"\\"+"SUMMARY.md"# os.path.isfile(fname)bookignore = self.pypath + "\\" + ".bookignore"if os.path.isfile(bookignore):# 文件存在 啥也不干passelse:with open(bookignore, "w", encoding="utf-8") as f2:f2.write("file.md\n")print("| building...")os.chdir(self.pypath)os.system("gitbook build")# os.system('pause')def replace_sum(self):# SUMMARY.md 路径# 更新路径summary_path = self.pypath + "\\" + self.summary_file_namesour_path = self.pypath + "\\" + self.sum_file_name# summary_path = self.pypath + "\\" + "SUMMARY.md"with open(sour_path, "r", encoding="utf-8") as f1, open(summary_path, "w", encoding="utf-8") as f2:i = 0for line in f1:if line == "\n":# line 是空行passelse:# 判断line是不是最后一行i += 1if line[-1] != "\n":# 加上换行line += "\n"f2.write("- [")f2.write(line[:-4])f2.write("](")f2.write(line[:-1])f2.write(")")f2.write("\n")print("| gen summary success!!!")print("| total effect line:",i)# os.system('pause')def qucik_git(self):os.chdir(self.pypath)os.system("git add _book")os.system("git commit -m\"Commit by gitbook tool!!!\"")os.system("git push")# os.system('pause')def menu(self):# 获取输入# print("| =========================================")# print("| ================ gitbook tools ================")print("| --------------------------- gitbook tools ---------------------------")print("| 1:生成md")print("| 2: 转换SUMMARY")print("| 3: 编译>HTML")print("| 4: 发布Git")print("| 0: exit()")print("| --------------------------- gitbook tools ---------------------------")return input("| choose operation you need:")if __name__ == '__main__':yt = '''┌─┐       ┌─┐ + +┌──┘ ┴───────┘ ┴──┐++│                 ││       ───       │++ + + +███████───███████ │+│                 │+│       ─┴─       ││                 │└───┐         ┌───┘│         ││         │   + +│         ││         └──────────────┐│                        ││                        ├─┐│                        ┌─┘│                        │└─┐  ┐  ┌───────┬──┐  ┌──┘  + + + +│ ─┤ ─┤       │ ─┤ ─┤└──┴──┘       └──┴──┘  + + + +神兽保佑代码无BUG!'''print(yt)print("| --------------------------- gitbook tools ---------------------------")print("| @version: 21.4.23")print("| @description: gitbook tools auto gen file & build & sync to git")print("| @author: victor")print("| @site: https://victorfengming.gitee.io/")print("| @introduce: https://victorfengming.gitee.io/comic/python-gitbook-tools/")print("| @readme: https://victorfengming.gitee.io/file/exe/gitbook-tools/readme.md")print("| @download: https://victorfengming.gitee.io/file/exe/gitbook-tools/gitbook-tools-21.4.23.exe")print("| --------------------------- gitbook tools ---------------------------")# print("| 注意:使用前请将exe文件放到file.md同级目录下")# print("| ========================================")# print(os.path.isfile("E:\\Projects\\PycharmProjects\\untitled\\newFiletest\\12.md"))gt = GitbookTool(input("please input the root path(windows split symbol is \\)\n:"))while True:cho = gt.menu()if cho == "1":print(1)gt.gen_md()elif cho == "2":print(2)gt.replace_sum()elif cho == "3":print(3)gt.gitbook_build()elif cho == "4":print(4)gt.qucik_git()elif cho == "0":# print("| bye~")exit(0)

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

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

相关文章

shell脚本中用到的条件和循环语句

本博文介绍一下shell脚本中常用的条件和循环语句:条件语句:循环语句:示例:if语句:eg1.eg2.2.case语句:简单的case语句:配合循环的case语句:3.for语句:简单的for语句&…

processing动态代码大全_做一张动态海报需要多少步?

人们习惯性地把程序员跟设计师分成两种不同性质的人,好像程序员就不会有美感,设计师逻辑思维就一定会很弱,但最近几年我们发现越来越多的程序员学设计,设计师学编程的跨界故事。新媒体艺术家,邱伟豪也是其中一员&#…

手写springboot_Spring Boot 入门教程 | 图文讲解

目录一、Spring Boot 是什么二、为什么要使用 Spring Boot三、快速入门3.1 创建 Spring Boot 项目3.2 项目结构3.3 引入 Web 依赖3.4 编写第一个接口3.5 启动程序,验证效果四、总结五、GitHub 示例代码一、Spring Boot 是什么以下截图自 Spring Boot 官方文档&#…

lunix 安装python3

Linux下默认系统自带python2.6的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的,所以可以安装python3和python2共存 首先去python官网下载…

机器学习之朴素贝叶斯法

转载请注明出处:http://www.cnblogs.com/Peyton-Li/ 朴素贝叶斯法是机器学习模型中一个比较简单的模型,实现简单,比较常用。 是定义在输入空间上的随机向量,是定义在输出空间上的随机变量。是和的联合概率分布。训练数据集由独立同…

如何让梯形变成平行四边形_开放的课堂 创新的天地——平行四边形的面积教学片段与反思...

一、 课题的确定学生在三年级学过长方形、正方形的面积计算,经历过从数方格的办法得出面积计算公式的过程。因此,学生对于面积计算公式的推导有一定的经验和知识基础。基于上述考虑,我想完全放手让学生去研究如何计算平行四边形的面积。这对学…

bzoj1670【Usaco2006 Oct】Building the Moat 护城河的挖掘

1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 387 Solved: 288[Submit][Status][Discuss]Description 为了防止口渴的食蚁兽进入他的农场,Farmer John决定在他的农场周围挖一条护城河。农场里一共同拥有N(8…

Vue之组件之间的数据传递

Vue的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据,必须使用特定的方法才能实现组件之间的数据传递。 下列为在vue-cli创建项目中的操作 一父组件向子组件传递数据 在Vue中,用props向子组件传递数据。 子组件部分&#…

偶然发现一个大佬写的 React 脚手架,叫Moderate, 用起来很方便

发现一个大佬写的 React 脚手架,叫Moderate, 用起来很方便 Moderate,意思为适中的,适度的,用这个作为代号,主要取决于他的本名“中用”,其一以贯之的想法就是中庸,秉承着以人为本的态度&#xf…

案例 自动办公_1300张办公系列前台参考图,请您查收!

设计情报局室内设计师的灵感聚集地关注一个有格调的空间必定有一处高颜值的前台漂亮的前台很重要...是空间给人的第一印象一个独一无二的前台设计还可以提升整个空间的气质与逼格连个漂亮的前台都没有作为颜控界扛把子的设计师们还怎么混?SO今天小编给大家带来一份《…

目标检测_目标检测 | Anchor free的目标检测进阶版本

今天说的是《Soft Anchor-Point Object Detection》,其也是最近关于anchor free的目标检测的论文,作者来自于CMU,一作同样也是FSAF(2019 CVPR)的作者。该论文的出发点还是在样本选择和FPN特征选择层面。背景Anchor free是目标检测领域的一个研…

homework1

一.什么是RUP?二.什么是XP?三.什么是敏捷过程? 一。什么是RUP?RUP是一种完整而且完美的软件过程 1。最佳实践 (1)迭代式开发 (2)管理需求 (3)使用基于构件软件的体系结构 (4&…

五个温度带的分界线_女神建筑师在拿破仑故乡打造的海景别墅,超美!超有温度!【环球设计2225期】...

生活的温度 法国建筑师阿米莉亚塔维拉(Amelia Tavella)一直对设计充满热情,她出生在阿雅克肖市,在巴黎的建筑学院学习建筑专业,如今她居住普罗旺斯地区的艾克斯。她说:“设计让我涉足很多有趣的领域并能充分发挥我的想象力。这是一…

银行it现状调研_中央银行系统行业现状调研分析及发展趋势预测报告(2019年版)...

QYResearch预测:2019-2025全球与中国中央银行系统市场现状及未来发展趋势【纸版价格】:RMB 15000【电子版(PDF)价格】:RMB 15000【报告篇幅】:112【报告图表数】:158【报告出版时间】:2019年11月报告摘要本…

视频编解码技术小结

1、什么是H.261编码协议 答:H.261是最早出现的视频编码建议,它采用的算法结合了可减少时间冗余的帧间预测和可减少空间冗余的DCT变换的混合编码方法,其输出码率是p64kbit/s。p取值较小时,只能传清晰度不太高的图像&#…

基于BISS0001构成的热释电红外延时照明控制器电路图

BISS0001是采用CMOS数模混合结构、具有DIP-16和SOIC-16两种封装的热释电红外传感信号处理集成电路。芯片内部集成了电压比较器、状态控制器、延时电路定时器、封锁时间定时器以及参考电压源等电路,常用于防盗报警器、自动门等各种自动开关。利用BISS0001构成的热释电…

安卓APP破解利器之FRIDA

本文讲的是安卓APP破解利器之FRIDA,在我去年参加RadareCon大会的时候,我了解到了一个动态的二进制插桩框架——Frida。起初我觉得它似乎只有一丁点趣味,后来经过实践才发现它原来是如此的有趣。记得游戏里的上帝模式吗?这就是Frid…

如何获取option的下标和值_数智化时代下,如何获取企业增长密码?

信息化时代下,很多企业前前后后上线了各种信息化系统,ERP、OA、CRM…随着企业数字化的深入推进,“移动互联网、云计算、大数据、人工智能、物联网、区块链”等技术的革新,这些信息化系统难以满足企业对数智化转型的新需求&#xf…

基于51单片机的交通灯控制设计

课程设计任务书及成绩 课程名称 单片机课程设计 题目 交通灯控制设计 课程设计目标与任务、计划与进度安排: 实践教学要求与任务: 1、了解交通灯的基本工作原理; 2、用Proteus模拟实现交通灯控制; 3、用Keil C51编程实现上述功能; 4、…

福斯i6飞行模式设置_数据网络卡的时候,不妨试试“开关飞行模式”?上网速度明显变快...

相信大家都有过这种经历,手机数据网速很慢的时候,开一下飞行模式再关闭,上网速度会比之前快很多,这就有人有了疑问,为什么呢?开飞行模式再关掉飞行模式,其实等于是完成了一次手动的小区重选。移…