python argparse - 我可以只使用互斥的可选参数还是有更好的方法
Posted
技术标签:
【中文标题】python argparse - 我可以只使用互斥的可选参数还是有更好的方法【英文标题】:python argparse - can I use only mutually exclusive optional arguments or is there a better way 【发布时间】:2013-04-06 04:22:14 【问题描述】:我正在编写一个脚本,它从网络上下载一个文件,执行一些处理并将数据存储到一个 mysql 数据库中。
我使用argparse
来接受参数。本质上,该脚本会做 4 件事中的 1 件事:
1) 从 Web 下载用户提供的文件名并执行 processing/db-insert。
2) 根据昨天的日期下载当前最多的文件名。我有一个 cron 作业,每天凌晨 2 点之后运行这部分。
3) 与 #2 相同,但要添加一个文件。
4) 处理当前文件夹中的用户定义文件,并将其保存到同一文件夹中的输出文件中。
脚本只能做上述 4 件事中的 1 件事。因此,我想我可以使用互斥的可选参数,如下所示:
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-f','--filename',action='store',nargs=1,help='Filename to download')
group.add_argument('-b','--bulkfile',action='store',nargs=2,help='Bulk filename to process and save')
group.add_argument('-l', '--load', action='store_true', help='Download current load data')
group.add_argument('-s', '--supply', action='store_true', help='Download current supply data')
args = parser.parse_args()
if args.filename:
do something
elif args.bulkfile:
do something
elif args.load:
do something
elif args.supply:
do something
else:
print "Improper usage. Can only use [-f | -b | -l| -s]"
return
我知道这并不理想。我宁愿让argparse
处理它的使用部分。我正在寻找实现目标的最佳方式。我很感激帮助。
【问题讨论】:
似乎因为这两个回答回答了两个完全不同的问题,所以您的问题并不清楚...... 我真的不知道子命令是什么,但我认为它们在某些时候会派上用场。根据我的要求,您的回答最好地回答了我的问题。 【参考方案1】:argparse
将为您处理使用情况。在没有参数的情况下运行您的脚本,我收到以下错误消息:
usage: test.py [-h] (-f FILENAME | -b BULKFILE BULKFILE | -l | -s)
test.py: error: one of the arguments -f/--filename -b/--bulkfile -l/--load -s/--supply is required
同时运行 -l
和 -s
我明白了
usage: test.py [-h] (-f FILENAME | -b BULKFILE BULKFILE | -l | -s)
test.py: error: argument -s/--supply: not allowed with argument -l/--load
解析器会自动为您处理互斥参数的错误消息。
【讨论】:
谢谢你!所以我可以从我的 if 块中删除 else 子句并继续我已经拥有的内容? 是的。您无需执行任何其他操作。【参考方案2】:本着svn
或git
的精神,您可以使用sub-commands。
【讨论】:
感谢 ExP!我会调查的。以上是关于python argparse - 我可以只使用互斥的可选参数还是有更好的方法的主要内容,如果未能解决你的问题,请参考以下文章
Python Argparse,如何正确组织 ArgParse 代码