python 写命令行_使用Python轻松写出漂亮的命令行程序

本文介绍了如何使用Python的argparse模块快速创建命令行程序,包括基本命令行参数处理、子命令设计,以及argparse关键方法的运用。通过argparse,开发者能轻松实现功能丰富的命令行工具,提升开发效率。
摘要由CSDN通过智能技术生成

诞生之初用来作为配置管理语言的Python,现在已经成为最流行的编程语言之一,尤其是随着AI应用的兴起,变得无处不在。

Python中的getopt,optparse模块都可以进行命令行程序的开发,不过它们已经被废弃,在2.7和3.2版本中引入了argparse模块;这里介绍使用argparser模块,只需要数十行代码,就可以做出漂亮的命令行程序。

1.基本的命令行

先看看官方文档里的一个示例:

def main():

parser = argparse.ArgumentParser(description='Process some integers.')

parser.add_argument('integers', metavar='N', type=int, nargs='+',

help='an integer for the accumulator')

parser.add_argument('--sum', dest='accumulate', action='store_const',

const=sum, default=max,

help='sum the integers (default: find the max)')

args = parser.parse_args()

print args.accumulate(args.integers)

这几行代码实现的功能为:

如果命令行输入不带--sum选项,则对输入的多个整数执行max操作;否则,执行sum操作。例如:

在命令行中执行:

$ python prog.py 1 2 3 4

输出为:4

在命令行中执行:

$ python prog.py 1 2 3 4 --sum

输出为:10

上面的代码中,主要的过程分为三个步骤:

调用argparse.ArgumentParser的构造器创建一个ArgumentParser对象。

调用ArgumentParser的add_argument()方法添加命令行的参数,包括可选参数和必选参数。其中以--、 -开头的表示可选参数,其它的表示必须输入的参数。

调用parser.parse_args()方法对传入的sys.argv参数进行解析。

2.实现子命令

有时候,我们可以根据功能将命令行分组成一系列相关的子命令。例如,Git命令行可以分为以下几组:

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)

clone Clone a repository into a new directory

init Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)

add Add file contents to the index

mv Move or rename a file, a directory, or a symlink

reset Reset current HEAD to the specified state

rm Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)

bisect Find by binary search the change that introduced a bug

grep Print lines matching a pattern

log Show commit logs

show Show various types of objects

status Show the working tree status

grow, mark and tweak your common history

branch List, create, or delete branches

checkout Switch branches or restore working tree files

commit Record changes to the repository

diff Show changes between commits, commit and working tree, etc

merge Join two or more development histories together

rebase Forward-port local commits to the updated upstream head

tag Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)

fetch Download objects and refs from another repository

pull Fetch from and integrate with another repository or a local branch

push Update remote refs along with associated objects

在Python中,利用argparse模块也可以很容易做出这样的子命令行程序。

例如,我们要做一个对用户信息进行管理的命令行程序,包括添加、删除、查询显示等几个功能。

我们可以根据功能将其分为三个子命令:add,delete,show。

相应的代码可以这样写:

def main():

parser = argparse.ArgumentParser(prog='cmd')

sub_parser = parser.add_subparsers(title='subcommands',

description='valid subcommands',

help='config subscommand help')

add_parser = sub_parser.add_parser('add',help='add user config')

add_parser.add_argument('--name', required=True, help='user name')

add_parser.add_argument('--addr', required=False, help='user address')

add_parser.add_argument('--phone', required=False, help='phone number')

add_parser.set_defaults(func=add_fn)

delete_parser = sub_parser.add_parser('delete', help='delete user config')

delete_parser.add_argument('--name', required=True, help='user name')

delete_parser.set_defaults(func=delete_fn)

show_parser = sub_parser.add_parser('show', help='show user config')

show_parser.set_defaults(func=show_fn)

args = parser.parse_args()

args.func(args)

对上面的代码进行概要的解释:

ArgumentParser对象的add_subparsers()方法创建了一个特殊的action实例,对这个实例分别调用add_parser()方法来创建子命令对应的ArgumentParser,再调用这个ArgumentParser实例的add_argument()方法来添加子命令的参数。

一个比较方便的地方在于,可以通过ArgumentParser的set_defaults()方法来设置子命令对应的处理函数。上面的示例中,分别为三个子命令设置了处理函数:add_fn,delete_fn,show_fn。

在命令行程序中执行:

$ python cmd.py --help

将显示出以下信息:

usage:

cmd [sub-command]

optional arguments:

-h, --help show this help message and exit

subcommands:

valid subcommands

{add,delete,show} config subscommand help

add add user config

delete delete user config

show show user config

从帮助信息中可以看到,命令行被组织为三个子命令,分别为add,delete,show。

在命令行中执行:

$ python cmd.py add --help

可以查看add子命令的帮助信息:

usage: cmd [sub-command] add [-h] --name NAME [--addr ADDR]

[--phone PHONE]

optional arguments:

-h, --help show this help message and exit

--name NAME user name

--addr ADDR user address

--phone PHONE phone number

对于add子命令,它有3个参数,分别为用户名、联系地址、电话号码;其中用户名为必选参数,其它两个为可选参数。

在命令行中执行:

$ python cmd.py add --name 'Eric' --addr 'California,USA' --phone '0076938377'`

添加一个User的处理逻辑将由add_fn()来完成。程序中将得到一个信息为{name='Eric',addr='California,USA', phone='0076938377'}的User。

def add_fn(args):

args_dict = vars(args)

name = args_dict['name']

address = args_dict['addr']

phone_number = args_dict['phone']

print 'Add User : %-10s %10s %12s' % (name, address, phone_number)

...

其它的delete和show子命令与此类似,不再赘述。

3.小结

使用Python的argparse模块,短短的几十行代码就可以搭建起来一个命令行程序的骨架。

argparse模块中最重要的是ArgumentParser对象,它包含了以下几个方法:

add_argument()

add_subparsers()

parse_args()

关于这几个方法的用法,以及参数的详细的说明请参考官方文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值