python cmdline_Python cmdline包_程序模块 - PyPI - Python中文网

命令行

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第三方库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值