rake 的替代方案
我的博客 http://wangxuan.me 是用jekyll搭建托管在github上的。用了很多年,一直都感觉不错。jekyll中有个创建post的Rakefile,可以用 rake post title=”” 这个命令来创建post模版。我也很喜欢用。但是执行rake命令需要安装ruby,而我平时是不用ruby的,虽然mac上装了,但是新NUC上我不想再仅仅为了用这一个命令就把ruby装上,我想找个python脚本的替代方案,结果,没找到,于是只好自己动手写一个。
主要用argparse模块来实现,比直接用sys.argv优雅一点。 看一下帮助:
$ python3 new_post.py -h
创建post
optional arguments:
-h, --help show this help message and exit
-et ENGLISH_TITLE, --english-title ENGLISH_TITLE
英文标题
-ct CHINESE_TITLE, --chinese-title CHINESE_TITLE
中文标题
-sub SUBTITLE, --subtitle SUBTITLE
中文子标题
-cat CATEGORY, --category CATEGORY
分类
-tags TAGS, --tags TAGS
标签 多个用逗号分隔
看一个例子,就是生成这篇文章的例子:
$ python3 new_post.py -et "user python to create jekyll post" -ct "python脚本创建jekyll post" -cat tech -tags python,jekyll
_posts/2021-12-27-user-python-to-create-jekyll-post.md 创建成功!
_posts/2021-12-27-user-python-to-create-jekyll-post.md 中生成的内容,如下:
---
layout: post
title: python脚本创建jekyll post
subtitle: 'rake 的替代方案'
date: 2021-12-27
category: tech
tags: [python,jekyll]
---
完整的代码如下:
import argparse
from datetime import date
import os
def create_post(post_name,ct,sub,date_,cat,tags):
post = open(post_name,'w')
post.write("---\n")
post.write("layout: post\n")
post.write("title: %s\n" % ct)
post.write("subtitle: '%s'\n" % sub)
post.write("date: %s\n" % date_)
post.write("category: %s\n" % cat)
post.write("tags: [%s]\n" % tags)
post.write("---\n")
post.close()
print("%s 创建成功!" % post_name)
if __name__ == '__main__':
# print(sys.argv)
parser = argparse.ArgumentParser(description='创建post')
parser.add_argument('-et', '--english-title', help='英文标题')
parser.add_argument('-ct', '--chinese-title', help='中文标题')
parser.add_argument('-sub', '--subtitle', help='中文子标题')
parser.add_argument('-cat', '--category', help='分类')
parser.add_argument('-tags', '--tags', help='标签 多个用逗号分隔')
args = parser.parse_args()
# print(type(args),args)
et = args.english_title if args.english_title else ""
ct = args.chinese_title if args.chinese_title else ""
sub = args.subtitle if args.subtitle else ""
cat = args.category if args.category else ""
tags = args.tags if args.tags else ""
# print(et,ct)
et = et.replace(" ","-")
today = date.today()
date_ = today.strftime("%Y-%m-%d")
post_name = "_posts/%s-%s.md" % (date_, et)
# print(post_name)
if os.path.exists(post_name):
print(os.path.abspath(post_name))
str = input("%s已存在 是否覆盖?Y-是 N-否 :"% post_name)
if 'Y' == str:
create_post(post_name,ct,sub,date_,cat,tags)
else:
create_post(post_name,ct,sub,date_,cat,tags)
如果你也用jekyll,恰好也不想装ruby,可以试一下这个。:)
Enjoy!