Please enable Javascript to view the contents

开发 Tips(3)

 ·  ☕ 3 分钟

主要记录最近遇到的一些开发问题,解决方法。

1. Python 的日志模块

Python 的 logging 模块主要由四个部分组成:

  1. Loggers: 可供程序直接调用的接口
  2. Handlers: 将日志记录输出至合适的位置
  3. Filters: 提供更细粒度的日志是否输出判断
  4. Formatters: 定制最终记录打印的布局格式

看下面这个例子,log1.py 文件

1
2
3
4
5
6
7
8
import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

logger.info('info log')
logger.debug('debug log')
logger.warning('Warning log')

直接执行,输出:

1
2
2018-10-26 21:08:02,905 - __main__ - INFO - info log
2018-10-26 21:08:02,907 - __main__ - WARNING - Warning log

log2 文件

1
from log1 import logger

直接执行,输出:

1
2
2018-10-26 21:11:36,849 - log1 - INFO - info log
2018-10-26 21:11:36,849 - log1 - WARNING - Warning log

format 部分参数:

  • %(levelno)s:打印日志级别的数值
  • %(levelname)s:打印日志级别的名称
  • %(pathname)s:打印当前执行程序的路径,其实就是 sys.argv[0]
  • %(filename)s:打印当前执行程序名
  • %(funcName)s:打印日志的当前函数
  • %(lineno)d:打印日志的当前行号
  • %(asctime)s:打印日志的时间
  • %(thread)d:打印线程 ID
  • %(threadName)s:打印线程名称
  • %(process)d:打印进程 ID
  • %(processName)s:打印线程名称
  • %(module)s:打印模块名称
  • %(message)s:打印日志信息

2. Python 的调试工具

  • pdb

The Python Debugger 是官方调试器,内置在 Python 标准模块中。

使用方式:$python -m pdb scriptfile 或者在代码中 pdb.set_trace()

  • ipdb

基于 ipython 的 pdb,是一个增强版的 pdb。

使用方式:$ipdb scriptfile$python –pdb scriptfile

  • PuDB

全屏的基于控制台的可视化调试器。

使用方式:$python -m pudb.run scriptfile$pudb scriptfile

3. Babel 转码器

ES6 提供了许多新特性,但并不是所有的浏览器都能够完美支持,ES5 支持得好很多。Babel 是一个 ES6 转码器,可以将 ES6 代码转为 ES5 代码。这意味着,你可以用 ES6 的语法编写程序,又不用担心现有环境是否支持。

1
2
3
4
5
6
7
// 转码前
input.map(item => item + 1);

// 转码后
input.map(function (item) {
  return item + 1;
});

Babel 的配置文件是 .babelrc ,存放在项目的根目录下。使用该文件设置转码规则和插件,基本格式如下:

1
2
3
4
{
  "presets": [],
  "plugins": []
}

4. Badge 生成器

开源项目的文档中,通常会添加各种 Badge 。这些 Badge 有的是写死的,有的是第三方工具动态获取的。推荐 http://shields.io/ 可以非常方便的生成各种 Badge 。

5. 代码统计工具 - Cloc

Cloc 是一款使用 Perl 语言开发的开源代码统计工具,支持多平台、多语言,能够计算指定目标文件或文件夹中的文件数(files)、空白行数(blank)、注释行数(comment)和代码行数(code)。

Windows 下,可以先下载安装 msys2,使用 $pacman -S cloc 安装 Cloc,然后统计:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
cloc .
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
Python                          523          10217          13308          61964
JSON                             24             22              0          33329
HTML                            267           2994            752          29736
XML                               3              0              0          21113
...
--------------------------------------------------------------------------------
SUM:                           2157         142804         147553         912384
--------------------------------------------------------------------------------

6. Django Model 的更新信号处理

通过 created 字段,可以区分 Django Model 的新建和更新操作。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from django.db.models.signals import post_save


@receiver(post_save, sender=User)
def handle_when_user_updated(sender, instance, created, **kwargs):
    if not created:
        # User object updated
        pass
    else:
        # User object created
        pass

微信公众号
作者
微信公众号