1. Gitbook
Gitbook
可以将md
文件自动做成类似电子书的形式,自动生成目录、风格简约,使用方便,建议写文档的同学都可以学习一下,书写方面同样是支持markdown
和html
语法的
2. 使用流程
网上大都能搜到更具体的教程,这里就不赘述了,主要就是
I. 安装NodeJS(推荐v4.0.0及以上版本)
II. npm install gitbook-cli -g
,gitbook-cli
是一个在同一系统上安装和使用多个版本的GitBook的实用程序。它将自动安装所需版本的GitBook来构建一本书。
III. 初始化书籍目录(有点类似git
初始化仓库,执行一次即可,会生成README.md
和SUMMARY.md
文件,少一个都不行QAQ
):gitbook init
IV. 网页上预览:git serve
,执行后会返回一个网址,进入即可预览(linux
下记得打开4000
端口或者更改端口)
V. 书写方面主要是README.md
作为图书简介,会自动放在整个文档的坐前面显示,SUMMARY
的第一个板块也是README.md
,如果你强行更改,README.md
还是会出现在第一个位置(网页上显示的第一个位置,回到默认的Introduce
,虽然SUMMARY
中没有他),SUMMARY作为目录,按以下格式书写,[]()
作为每一章或者某个大类的标题,前面加上二级强调符号则作为次级文档(每一篇文档的标题),后面的()
中就是具体的包含文章的.md
文档
# CATALOG —— Operations Notes
* [简介](README.md)
* [Arcconf ](arcconf.md)
- [设置Spinup参数](设置Spinup参数.md)
- [设置硬盘PowerSave功能](设置硬盘PowerSave功能.md)
- 官方文档
- 了解了这些基础后就可以着手开始操作了
3. 文件初始化
我们新建一个目录作为书籍目录,做相应初始化以及数据保存,将各个文件的基础信息写入,注意这里的模式,初始化时可以直接用w覆盖,因为不需要保留之前的数据,调用
subprocess
执行gitbook init
初始化书籍
def dir_init(dir, path='.'):
if dir not in os.listdir(path):
os.mkdir(dir)
os.chdir(dir)
subprocess.Popen('gitbook init', shell=True)
with open('README.md', 'w', encoding='utf-8') as f:
f.write("# Operations Notes\n")
f.write("\n")
f.write(">用以记录运维学习过程中的工作记录以及命令操作")
with open('SUMMARY.md', 'w', encoding='utf-8') as f:
f.write("# CATALOG —— Operations Notes\n")
f.write("\n")
f.write("* [简介](README.md)\n")
f.write("\n")
f.write("* [Arcconf ](arcconf.md)\n")
with open('arcconf.md', 'w', encoding='utf-8') as f:
f.write("# Arcconf操作指南\n")
f.write("\n")
f.write(">记录Arcconf的命令操作\n")
4. 数据写入
这一步中我们将之前获取到的数据写入文件当中,并注意处理好换行符以及每个部分的代码格式,因为需要符合
markdown
规范,我们使用字符串构造,注意文件名的格式,有/
的需要转换成其他的,这里我将/
转换成了_
,文件写入部分针对表格也不需要直接调用方法,文件中打开文件可能会产生冲突,所以直接写比较好。
def write_md(url):
title, function, order, tabs, tutor, exams_title, exams = get_data_html(get_html(url))
# 准备目录文件
with open('SUMMARY.md', 'a', encoding='utf-8') as f:
for title_ in title:
f.write(" - [{}]({}.md)\n".format(title_, title_.replace('/', '_')))
for title__ in list(enumerate(title)):
with open(title__[1].replace('/', '_') + '.md', 'a', encoding='utf-8') as f:
# title__[0]是位置,title__[1]是名称
f.write("# {}\n".format(title__[1]))
f.write("\n")
f.write("## 命令功能\n")
f.write(">{}\n".format(function[title__[0]]))
f.write("\n")
f.write("## 命令格式\n")
if len(order[title__[0]]) == 1:
for data in order[title__[0]]:
f.write("`{}`\n".format(data))
else:
f.write("~~~\n")
for data in order[title__[0]]:
f.write("{}\n".format(data))
f.write("~~~\n")
f.write("\n")
f.write("## 参数说明\n")
title, line, body = get_data(tabs[title__[0]])
result = [" | ".join(data) for data in body]
f.write("| " + "| ".join(title) + "|" + "\n")
f.write("| " + " | ".join(line) + "|" + "\n")
for data in result:
f.write("| " + data + "|" + "\n")
# write_data(tabs[title__[0]], title__[1] + ".md")
f.write("\n")
f.write("使用指南\n")
for data in tutor[title__[0]]:
f.write("- {}\n".format(data))
f.write("\n")
f.write("使用实例\n")
f.write("~~~\n")
if len(exams_title[title__[0]]) > 1:
f.write("{}\n".format(str("&".join(exams_title[title__[0]]).replace("#", ""))))
else:
f.write("{}\n".format(str(exams_title[title__[0]][0])))
for data in exams[title__[0]]:
f.write("{}\n".format(data))
f.write("~~~\n")
subprocess.Popen('gitbook serve', shell=True)