免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1572 | 回复: 0
打印 上一主题 下一主题

分享一个写小demo用的模板 [复制链接]

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-02 15:54 |只看该作者 |倒序浏览
有时想写一个小程序,接收几个命令行参数,输出一些信息。如果是‘hello,world’这种复杂度,sys模块和print函数就搞定了,但现实常常复杂那么一点点,查argparse和logging的文档是个体力活,容易被文档淹没,通常又不需要太复杂的功能,所以就抽空写了一个简单模板。

1.完整源码。
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """Python Demo Template.

  4. notes:
  5.   - log file <app.log> will be created in CWD

  6. tips:
  7.   - itertools and operator may simplify sort and iterate
  8.   - sqlite3 may be helpful for your housekeeping file format

  9. """

  10. import argparse
  11. import logging
  12. import logging.config

  13. def main():
  14.     # all of command line arguments should be added here
  15.     parser = argparse.ArgumentParser(description='Python Demo Template')
  16.     parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
  17.                         default='-', help='text source [default: sys.stdin]')
  18.     parser.add_argument("-v", "--verbose", action="count", default=0,
  19.                        help="increase output verbosity")
  20.     args = parser.parse_args()

  21.     # runtime services: logging
  22.     env_init(args.verbose)
  23.    
  24.     # main logic begins
  25.     for line in args.infile:
  26.         logging.info(line.rstrip())

  27. def env_init(verbose):
  28.     # logging facility, only loglevel can be changed
  29.     if verbose >= 2:
  30.         loglevel = logging.DEBUG
  31.     elif verbose >= 1:
  32.         loglevel = logging.INFO
  33.     else:
  34.         loglevel = logging.WARNING

  35.     LOGGING = {
  36.         'version': 1,
  37.         'formatters': {
  38.             'simple': {
  39.                 'format': '%(levelname)s %(message)s'
  40.             },
  41.             'verbose': {
  42.                 'format': ('%(levelname)s %(asctime)s %(module)s '
  43.                            '%(process)d %(thread)d %(message)s')
  44.             },
  45.         },
  46.         'handlers': {
  47.             'console': {
  48.                'level': 'DEBUG',
  49.                'class': 'logging.StreamHandler',
  50.                'formatter': 'simple'
  51.             },
  52.             'file': {
  53.                 'level': 'INFO',
  54.                 'class': 'logging.handlers.RotatingFileHandler',
  55.                 'formatter': 'verbose',
  56.                 'filename': 'app.log',
  57.                 'maxBytes': 10*1024*1024,
  58.                 'backupCount': 5
  59.             },
  60.         },
  61.         'root': {
  62.             'level': loglevel,
  63.             'handlers': ['console', 'file']
  64.         },
  65.     }
  66.     logging.config.dictConfig(LOGGING)

  67. if __name__ == '__main__':
  68.     main()
复制代码
2. 如果用Vim编辑代码,可以加一个autocmd,假设上述代码保存为py_main。
  1. "Python main template
  2. autocmd! BufNewFile *main.py 0r ~/.vim/templates/py_main
复制代码
3. 用Vim新建以main.py为后缀的文件时,就会自动载入这个模板。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP