python命令行工具_python命令行工具click

python命令行工具click

click是一款非常受欢迎的python命令行解析工具,它简单易用,强大又灵活

1. 为何需要命令行工具

我们编写一个具有特定功能的脚本时,通常脚本的输入都是硬编码在代码里的,但如果你实现的是一个比较通用的命令行工具,那么它运行时所需要的参数就不能写死在代码里,不然每次运行时都要修改代码。比如你写了一个获取城市天气信息的脚本,程序的主函数需要城市的名称,你总不能每次运行时都修改脚本里的代码吧。

命令行工具在使用时传入运行所需参数,常见的比如pip,你想安装某个库需要使用

pip install Click

你想卸载某个库,则使用命令

pip uninstall Click

pip就是一个命令工具,它要根据不同的命令参数执行不同的任务。

python标准库提供了Argparse这个命令行解析工具,但着实不好用,此外,你也可以使用sys.argv来临时充当命令行解析工具,但不建议这么做

2. click

使用click可以帮助我们轻松的实现命令行工具

2.1 click.command()

脚本里的函数被click.command()装饰以后,函数就变成了一个命令行工具

import click

@click.command()

def say_hello():

click.echo('hello')

if __name__ == '__main__':

say_hello()

运行程序

python3 demo.py

hello

这样来看,似乎和正常的函数没有什么区别,别着急,继续往下看

2.2 click.option()

click.option()可以为工具设置可选参数

import click

@click.command()

@click.option("-name", default='world', help="姓名", type=str)

def say_hello(name):

click.echo('hello {name}'.format(name=name))

if __name__ == '__main__':

say_hello()

执行程序

python3 demo.py -name=lili

hello lili

只用click, 很轻松的就传递了参数,不仅如此,还提供了查看文档的功能,执行命令

python3 demo.py --help

Usage: demo.py [OPTIONS]

Options:

-name TEXT 姓名

--help Show this message and exit.

在脚本的后面使用--help参数,就可以获得命令行工具的说明文档

2.3 click.argument

为工具设置必传参数

import click

@click.command()

@click.option('--count', default=1, help='number of greetings')

@click.argument('name')

def hello(count, name):

for x in range(count):

click.echo('Hello %s!' % name)

if __name__ == '__main__':

hello()

再次使用--help命令查看工具文档

Usage: demo.py [OPTIONS] NAME

Options:

--count INTEGER number of greetings

--help Show this message and exit.

你应该注意到,name参数是必传的,你必须像下面这样来执行工具

python3 demo.py --count=2 world

Hello world!

Hello world!

2.4 click.group()

前面展示的命令工具,都只有一个命令,实际生产中显然是不够用的,click.group()可以让我们把许多命令加到一个组中

import click

@click.group()

def cli():

pass

@click.command()

def initdb():

'''

初始化数据库

:return:

'''

click.echo('Initialized the database')

@click.command()

def dropdb():

'''

删除数据库

:return:

'''

click.echo('Dropped the database')

cli.add_command(initdb)

cli.add_command(dropdb)

if __name__ == '__main__':

cli()

还可以使用更简单的方法来实现相同的功能

import click

@click.group()

def cli():

pass

@cli.command()

def initdb():

'''

初始化数据库

:return:

'''

click.echo('Initialized the database')

@cli.command()

def dropdb():

'''

删除数据库

:return:

'''

click.echo('Dropped the database')

if __name__ == '__main__':

cli()

我在函数里增加了注释,目的是使用--help命令时可以查看注释

python3 demo.py --help

sage: demo.py [OPTIONS] COMMAND [ARGS]...

Options:

--help Show this message and exit.

Commands:

dropdb 删除数据库 :return:

initdb 初始化数据库 :return:

实际使用

python3 demo.py dropdb

3. 打包

说是命令行工具,但是仍然是用python命令在执行python脚本,想要实现那种直接使用命令的效果,需要将代码打包,以2.4中的代码为例,在demo.py同目录下新建一个setup.py文件,内容为

from setuptools import setup

setup(

name='click-example-db',

version='0.1',

py_modules=['cooldb'],

include_package_data=True,

install_requires=[

'click',

],

entry_points='''

[console_scripts]

cooldb=demo:cli

''',

)

name 就是包的名字

version 指定了版本

py_modules 指定了模块名称

entry_points 设置成[console_scripts], 表明要安装成可以在终端调用的命令模块,

cooldb=demo:cli,cooldb是命令,执行该命令时,等同于执行demo.py的cli

最关键的一步了,使用pip进行打包安装

pip install --editable .

一定要注意editable后面的那个点,千万别落下, 安装过程如下

Obtaining file:///Users/kwsy/kwsy/coolpython

Requirement already satisfied: click in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (from click-example-db==0.1) (7.0)

Installing collected packages: click-example-db

Running setup.py develop for click-example-db

Successfully installed click-example-db

Successfully 表示安装成功,现在,就可以像使用pip命令一样使用cooldb命令了

cooldb dropdb

Dropped the database

cooldb --help

Usage: cooldb [OPTIONS] COMMAND [ARGS]...

Options:

--help Show this message and exit.

Commands:

dropdb 删除数据库 :return:

initdb 初始化数据库 :return:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值