[python]自動化將markdown文件轉成html文件


一、背景

我們項目開發人員寫的文檔都是markdown文件。對於其它組的同學要進行閱讀不是很方便。每次編輯完markdown文件,我都是用軟件將md文件轉成html文件。剛開始轉的時候,還沒啥,轉得次數多了,就覺得不能繼續這樣下去了。作為一名開發人員,還是讓機器去做這些瑣碎的事情吧。故寫了兩個腳本將md文件轉成html文件,並將其放置在web服務器下,方便其他人員閱讀。

主要有兩個腳本和一個定時任務:

  • 一個python腳本,主要將md文件轉成html文件;
  • 一個shell腳本,主要用於管理邏輯;
  • 一個linux定時任務,主要是定時執行shell腳本。

二、用python將markdown轉成html

2.1 python依賴庫

使用python的markdown庫來轉換md文件到html依賴兩個庫:

  • pip install markdown
  • pip install importlib

2.2 核心代碼

核心代碼其實只有一句,執行 markdown.markdown(text)就可以獲得生成的html的原文。

    input_file = codecs.open(in_file, mode="r", encoding="utf-8")
    text = input_file.read()
    html = markdown.markdown(text)

2.3 html編碼和html樣式

直接markdown.markdown(text)生成的html文本,非常粗略,只是單純的html內容。而且在瀏覽器內查看的時候中文亂碼(在chrome中),沒有好看的css樣式,太丑了。

解決辦法也很簡單,在保存文件的時候,將<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />和css樣式添加上。就這么簡單解決了。

2.4 完整python內容

  • 讀取md文件;
  • 將md文件轉成html文本;
  • 添加css樣式和保存html文本。

python代碼內容:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 使用方法 python markdown_convert.py filename

import sys
import markdown
import codecs


css = '''
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
<!-- 此處省略掉markdown的css樣式,因為太長了 -->
</style>
'''

def main(argv):
    name = argv[0]
    in_file = '%s.md' % (name)
    out_file = '%s.html' % (name)

    input_file = codecs.open(in_file, mode="r", encoding="utf-8")
    text = input_file.read()
    html = markdown.markdown(text)

    output_file = codecs.open(out_file, "w",encoding="utf-8",errors="xmlcharrefreplace")
    output_file.write(css+html)

if __name__ == "__main__":
   main(sys.argv[1:])

三、shell邏輯

3.1 邏輯說明

建立一個shell文件,用於進行邏輯處理,主要操作如下:

  • 更新svn文件,將最新的md文件更新下來(此處假設md文件是測試文檔.md);
  • 執行python markdown_convert.py $NAME將md文件轉成html文件(生成測試文檔.html);
  • 將轉好的html遷移到web路徑下(移動到html/測試文檔.html);
  • 啟動一個web服務(此處用的是python的SimpleHTTPServer的web服務器).

3.2 完整shell邏輯

#!/bin/bash

NAME='測試文檔'

## 更新代碼
svn update

## 刪除html文件
if [ -f "$NAME.html" ];then
    rm "$NAME.html"
fi

## 生成html
if [ -f "$NAME.md" ];then
    python markdown_convert.py $NAME
fi

## 生成html目錄
if [ ! -d "html" ];then
    mkdir "html"
fi

## 拷貝html文件
if [ -f "$NAME.html" ];then
    mv -f "$NAME.html" "html/"
fi

## 開啟web服務器
PID=`ps aux | grep 'python -m SimpleHTTPServer 8080' | grep -v 'grep' | awk '{print $2}'`

if [ "$PID" = "" ];then
    cd html
    nohup python -m SimpleHTTPServer 8080 &
    echo 'start web server'
else
    echo 'already start'
fi

四、linux定時任務

在shell命令下輸入crontab -e進入linux定時任務編輯界面。在里面設置markdown2web.sh腳本的定時任務:

## 更新文檔
*/10 * * * * cd /home/xxx/doc; sh markdown2web.sh > /dev/null 2>&1

設置每10分鍾執行一次markdown2web.sh腳本,當然也可以根據需求修改頻率。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM