【发布时间】:2017-05-05 05:30:02
【问题描述】:
我想使用 argparse 在命令行上接收任意数量的 sets 位置参数。例如:
myapp.py show 1
show 参数是一个“操作”,1 是一个“操作数”。
我希望能够接受多个组操作和操作数:
myapp.py show 1 test 2 write 3
我知道我可以添加一个带有N 的nargs 参数的参数作为最后一个参数,以允许该参数的任意重复次数。我希望做同样的事情,但每次重复不止一个参数。
在这个例子中:
myapp.py show 1 test
应该是无效的,因为每个操作都必须带有一个操作数。
另外,假设所有操作数都是整数,所有运算符都是字符串:
myapp.py 1 show 2 test
应该失败,或者至少可以在代码中检测到,这样我才能导致失败,因为操作员必须先来。
在不同的项目中,每个重复的参数集我可能还需要两个以上的“参数”,例如:
myapp.py test 1 outputFile.dat write 2 writeFile.dat
这个可以吗?
【问题讨论】:
-
如果在这些操作数前面加上
--,您感觉如何?myapp.py --show 1 --test 2 -
我可以这样做,但它不适用于每个操作需要两个操作数的第二个示例。
-
用click怎么样?
-
@fdmillion -- 抱歉,我说的是操作数,是指操作符。如果给定运算符有 2 个操作数,为什么它不起作用?
myapp.py --show 1 --test 1 2 --other 1。只要每个运算符都知道它需要多少个操作数......另外,您是否希望运算符被多次给出?他们的顺序重要吗? -
这不适合
argparse。只需将sys.argv[1:]拆分为所需的配对或三胞胎组合即可。