继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python写CLI命令行程序

2018-01-05 16:23:098400浏览

麦兜搞IT

2实战 · 11手记 · 12推荐
TA的实战

使用Python写命令行程序,以argparse是基础,但是有两个更好的工具可以选择,click和oslo.config

click

click可以用于简单的命令行程序,下面是我写的一个demo

https://github.com/xiaopeng163/click-demo

$ cd click-demo
$ python setup.py install
$ clickctl
Usage: clickctl [OPTIONS] COMMAND [ARGS]...

  Click Demo Command Line Interface

Options:
  -v, --verbose  show debug message.
  --help         Show this message and exit.

Commands:
  init    Initializes a controller cluster on master node.
  join    join the controller cluster as agent node
  status  Get cluster node list
$ clickctl init --help
Usage: clickctl init [OPTIONS]

Options:
  --advertise-addr TEXT  The REST Server advertise address  [required]
  --help                 Show this message and exit.

$ clickctl init --advertise-addr=1.1.1.1:80
Try to initialized the cluster
$ clickctl -v init --advertise-addr=1.1.1.1:80
Try to initialized the cluster
The REST Server advertise address: 1.1.1.1:80

oslo.config

可以用于大型复杂命令行程序的开发,特别是命令行参数和ini格式配置文件同时结合使用的命令行程序
我在yabgp/yabmp里使用了oslo.config, 命令行的效果如下:

python bin/yabmpd -h
usage: yabmpd [-h] [--config-dir DIR] [--config-file PATH]
              [--log-backup-count LOG_BACKUP_COUNT]
              [--log-config-file LOG_CONFIG_FILE] [--log-dir LOG_DIR]
              [--log-file LOG_FILE] [--log-file-mode LOG_FILE_MODE]
              [--nouse-stderr] [--noverbose] [--use-stderr] [--verbose]
              [--version] [--bmp-bind_host BMP_BIND_HOST]
              [--bmp-bind_port BMP_BIND_PORT] [--bmp-write_dir BMP_WRITE_DIR]
              [--bmp-write_msg_max_size BMP_WRITE_MSG_MAX_SIZE]

optional arguments:
  -h, --help            show this help message and exit
  --config-dir DIR      Path to a config directory to pull *.conf files from.
                        This file set is sorted, so as to provide a
                        predictable parse order if individual options are
                        over-ridden. The set is parsed after the file(s)
                        specified via previous --config-file, arguments hence
                        over-ridden options in the directory take precedence.
  --config-file PATH    Path to a config file to use. Multiple config files
                        can be specified, with values in later files taking
                        precedence. Defaults to None.
  --log-backup-count LOG_BACKUP_COUNT
                        the number of backup log file
  --log-config-file LOG_CONFIG_FILE
                        Path to a logging config file to use
  --log-dir LOG_DIR     log file directory
  --log-file LOG_FILE   log file name
  --log-file-mode LOG_FILE_MODE
                        default log file permission
  --nouse-stderr        The inverse of --use-stderr
  --noverbose           The inverse of --verbose
  --use-stderr          log to standard error
  --verbose             show debug output
  --version             show program's version number and exit

bmp options:
  --bmp-bind_host BMP_BIND_HOST
                        Address to bind the BMP server to
  --bmp-bind_port BMP_BIND_PORT
                        Port the bind the BMP server to
  --bmp-write_dir BMP_WRITE_DIR
                        The BMP messages storage path

环境变量

另外因为如今容器非常流行,对于容器应用程序的配置,命令行不是很方便,一般采用环境变量的传递方式,如

os.environ.get('MONGODB_URL', 'mongodb://127.0.0.1:27017')
打开App,阅读手记
5人推荐
发表评论
随时随地看视频慕课网APP

热门评论

老师好想你弄一门结合多线程,协程,结合docker分布式部署和监控的企业级爬虫视频啊

http://img2.mukewang.com/5a8100640001d69c00170011.jpg

测试一下是否支持gif格式图片

查看全部评论