命令行
CMDLine包提供了一种指定和重写命令设置和日志记录配置的标准方法。使用命令行设置就像创建settings.yml:REMOTE_ADDR:
default: 'https://example.com/'
help: the remote address
并在主程序中编译设置:from cmdline import SettingsParser, settings
def main():
SettingsParser.compile_settings()
remote = settings.REMOTE_ADDR
print('remote addr:', remote)
if __name__ == '__main__':
sys.exit(main())
然后可以通过以下任何方式调用您的程序:$ remote
remote addr: https://example.com/
$ export REMOTE_ADDR=https://env.example.com/
$ remote
remote addr: https://env.example.com/
$ remote --remote-addr=https://arg-takes-precedence.example.com/
remote addr: https://arg-takes-precedence.example.com/
安装pip install cmdline
设置
设置是以覆盖方式配置的,从应用程序打包的根配置开始。标准的argparse选项用于配置设置。
覆盖默认值
打包的设置可以被文件系统上的其他设置文件、环境变量和最后的命令行参数覆盖。对于名为remote的命令,它们的应用顺序是:打包设置
<;sys.prefix>;/etc/remote/settings.yml
~/.remote/settings.yml
环境变量
命令行参数
环境变量完全映射到设置的名称,即环境变量REMOTE_ADDR配置REMOTE_ADDR设置。
命令行参数是设置的小写虚线版本,例如,命令行参数--remote-addr配置REMOTE_ADDR设置。
子命令
设置分析器支持argparse subcommands。通过向设置的选项中添加_subcommand键,可以将设置配置为子命令。例如:COPY_FORCE
default: no
_subcommand: copy
_SUBCOMMAND设置包含使用命令运行的子命令的名称。
文件
可以在_COMMANDS节中添加命令说明和帮助文本。_main将设置主程序的描述。任何其他键都将与同名的子命令相对应。例如,下面设置主程序的说明以及copy子命令的说明和帮助文本:_COMMANDS:
_main:
description: >
this is main description and can be a very long string
that covers multiple lines
copy:
description: >
this is copy subcommand description and can be a very long string
that covers multiple lines
help: copy files
类型转换
可以使用argparse的type设置将设置转换为特定类型。例如,设置type: int将把设置转换为整数。这是通过使用python的内置int()函数实现的。
当type是虚线字符串时,将导入并使用给定函数。例如,设置type: convesion.convert_bool将调用conversion包中的convert_bool()函数。
日志记录
类似地,日志记录是通过python的logging.config.dictConfig()函数配置的。有关dictconfig的更多信息,请参见docs.python.org;下面是一个示例。此配置设置一个console处理程序,该处理程序将日志发送到stdout,并设置一个null处理程序,该处理程序丢弃日志。默认的日志配置是将警告级别和更高级别的消息记录到控制台(由root日志记录器设置),并为mypkg.foo和mypkg.bar日志记录器配置另外两个日志记录器,其中mypkg.foo的日志级别设置为调试,并将mypkg.bar一起抛出。version: 1
disable_existing_loggers: False
formatters:
simple:
format: "%(asctime)s %(name)s:%(lineno)d %(levelname)s %(message)s"
handlers:
console:
class: logging.StreamHandler
level: WARN
formatter: simple
stream: ext://sys.stdout
"null":
class: logging.NullHandler
loggers:
mypkg.foo:
level: DEBUG
handlers: [console]
propagate: no
mypkg.bar:
handlers: ["null"]
propagate: no
root:
level: WARN
handlers: [console]
写入配置后,通过调用setup_logging()函数配置日志记录:import logging
from cmdline import setup_logging
def main():
setup_logging()
logging.getLogger(__name__).warning('ello')
if __name__ == '__main__':
sys.exit(main())
日志级环境
唯一可以在配置文件之外更新的日志配置是默认日志级别,可以使用环境变量LOG_LEVEL来更改;例如LOG_LEVEL=debug remote。
文件位置
创建名为config的目录。在该目录中,创建文件logconfig.yml和settings.yml。正确安装这些文件的基本步骤如下:#!/usr/bin/env python
import os
from setuptools import setup
def get_data_files(base):
for dirpath, dirnames, filenames in os.walk(base):
for filename in filenames:
yield os.path.join(dirpath, filename)
data_files = [
('config', list(get_data_files('config'))),
]
setup(name='remote',
version='0.0.1',
packages=['remote'],
data_files=data_files,
entry_points = {
'console_scripts': [
'remote = remote.command:main',
],
},
)
上面setup.py的文件结构如下:root_dir/
+- remote/
| +- __init__.py
| +- command.py
+- config/
| +- logconfig.yml
| +- settings.yml
+- setup.py
配置根环境变量
设置环境变量CMDLINE_CONFIG_ROOT将使给定路径成为设置和日志记录的主要配置位置。
欢迎加入QQ群-->: 979659372
推荐PyPI第三方库