我希望我的代码能够捕获一个位置" -y"和一个可选的" -tab"
对于前一个,它只取值1, 2, 3
这样我才能做到
mycode.py -tab -y 1
mycode.py -y1
or
mycode.py -tab -y 2
mycode.py -y2
or
mycode.py -tab -y 3
mycode.py -y3
如果我们给出3以外的值,就会引起错误。
在Python中使用它的方法是什么?
这是我的尝试:
# Setup argument paring
parser = argparse.ArgumentParser(description="Some description.")
parser.add_argument("-tab","--tabular", help="Some task", action="store_true")
parser.add_argument("-y","--yell", nargs=1, help="Type of fold change to show")
args = parser.parse_args()
tabular = False
type = 1
if args.tabular:
tabular=True
if args.yell == 1:
type = '1'
elif args.yell == 2:
type = 2
elif args.yell == 3:
type = 3
else:
raise Exception('Incorrect type, max 3')
它有3个问题:
type = 1
-y
位于可选位置(应该是位置)更新
启用-y
的位置参数,仍然无法正常工作。
完整代码:
#!/usr/bin/python
# Python 2.7.
import sys
import argparse
parser = argparse.ArgumentParser(description="Some description.")
parser.add_argument("-tab","--tabular", help="Some task", action="store_true")
parser.add_argument("-y", help="Type of fold change to show", choices=range(1,4), required=True, type=int)
args = parser.parse_args()
命令行:
$ python mycode.py -h
usage: mycode.py [-h] [-tab] [-y {1,2,3}]
Some description.
optional arguments:
-h, --help show this help message and exit
-tab, --tabular Some task
-y {1,2,3} Type of fold change to show
我的预期结果:
$ python mycode.py -h
usage: mycode.py [-h] [-tab] [-y {1,2,3}]
Some description.
positional arguments:
-y {1,2,3} Type of fold change to show
optional arguments:
-h, --help show this help message and exit
-tab, --tabular Some task
按ENTER或键入命令继续
答案 0 :(得分:1)
一般事项:
请勿使用is
来比较数字相等,请使用==
。
可选的命令行参数应该有两个破折号。同样,位置参数应该不以两个破折号为前缀。
当您add_argument
时,您可以指定choices
kwarg。
parser.add_argument("-y","--yell", help="Type of fold change to show", choices=range(1,4), type=int)
如果在1到3之外指定-y
,则会抱怨。我添加了type=int
指令,以便args.yell
成为int
而不是字符串。
注意我离开了nargs=1
kwarg。指定nargs=1
表示args.yell
是包含一个元素的列表,而不是int
。这是代码中错误的来源:[1]
不等于1
。