【发布时间】:2020-11-03 00:51:34
【问题描述】:
我设想我的应用程序有两种主要的操作模式:
- 从文件中读取值并对其进行操作
- 从一个范围内生成值并对其进行操作。
我的应用程序将被调用为:
myApp.py --type range 1000 2000
或
myApp.py --type from-file /tmp/myfile.csv
为了简洁起见,我省略了几个额外的选项,但它们使完整的参数处理器变得相关。
如果我选择范围,我需要 2 个位置参数,但如果我选择从文件,我只需要一个。可以使用 argparse 来根据 type 选项强制执行正确数量的位置参数吗?也许“选择”不是最好的 argparse 类型,有更好的方法吗?
import argparse
parser = argparse.ArgumentParser(description='myApp')
parser.add_argument('--type', '-t', choices=['range', 'from-file'], required=True,
help='Generate values from a range or load from a file.')
# Stuff here for argparse to enforce the correct number of positional parameters.
args = parser.parse_args()
另外,有没有一种好方法(比如内置于 argparse)使得不需要“--type”,但我可以运行我的应用程序:
myApp.py range 1000 2000
或
myApp.py from-file /tmp/myfile.csv
我希望 argparse 仍然强制 'range' 和 'from-file' 是唯一有效的选项,并且 2 个参数必须跟随 'range' 或 1 个参数必须跟随 'from-file'。
编辑:
我也可以使用以下调用:
myApp.py --range 1000 2000
或
myApp.py --from-file /tmp/myfile.csv
这可能会使需要 2 对 1 位置参数的过程更容易。但是我希望 argparse 强制指定两个选项之一,而不是同时指定。 argparse 能做到吗?
谢谢
【问题讨论】:
-
查看 ArgumentParser.add_mutually_exclusive_group 的排他性。不过,我不擅长位置参数。
标签: python arguments argparse options