Python Argparse:可选参数中的参数
我正在编写一个脚本,它可以根据传递到命令行的参数执行多项操作。例如:Python Argparse:可选参数中的参数,python,command-line-arguments,argparse,optional-arguments,Python,Command Line Arguments,Argparse,Optional Arguments,我正在编写一个脚本,它可以根据传递到命令行的参数执行多项操作。例如: #changed and simplified from actual code parser.add_argument('-a','--apple') parser.add_argument('-b','--boy') parser.add_argument('-c', '--car') parser.add_argument('-d', '--dog') args = parser.parse_args() python
#changed and simplified from actual code
parser.add_argument('-a','--apple')
parser.add_argument('-b','--boy')
parser.add_argument('-c', '--car')
parser.add_argument('-d', '--dog')
args = parser.parse_args()
python test.py -a apple aardvark aquaman
在命令行中我只需要一个参数。因此,只接受-a,-b,-c,-d中的一个,然后代码将根据传递的参数执行
我可以通过一系列if语句来实现,比如
if args.a:
if args.b:
等等,有没有更好的方法
对于每个命令行选项-a、-b、-c、-d,我希望传入一些参数。这些参数是特定的,并且根据初始命令行选项的不同而有所不同。例如:
#changed and simplified from actual code
parser.add_argument('-a','--apple')
parser.add_argument('-b','--boy')
parser.add_argument('-c', '--car')
parser.add_argument('-d', '--dog')
args = parser.parse_args()
python test.py -a apple aardvark aquaman
我考虑过使用NARG,但我不确定如何使每个论点都是正确的
以正确的顺序和
需要的论点。在上面的示例中,假设额外可选参数的数量为3,我希望确保所有参数都以字母a开头。
如何实现此目的?您可以使用以下方法定义互斥选项: 关于第二部分,您可以指定NARG和自定义类型。该类型可以是接受参数字符串的函数:
def check_a(val):
if not val or not val[0] == 'a':
raise argparse.ArgumentTypeError('Must be a value starting with a')
return val
parser.add_argument('-a', '--apple', nargs=3, type=check_a)
关于传递给option apple AFAIK的参数顺序,您必须在之后进行检查:
args = parser.parse_args()
if is_wrong_order(args.apple):
parser.error('Incorrect argument order to apple')
无论如何,在您的情况下,您可能希望使用而不是选项。谢谢!我会试试这个。快速问题,当您执行type=check_a时,为什么在函数需要参数val时不传入参数?还有另一个问题。我对argparse的一切都很陌生。您将如何访问check_a的返回值?它是否类似于args.apple.type?@helloworld95我将函数作为参数传递,而不是调用它。argparse将调用该函数,并将返回值作为列表存储在args.apple中,如我在上一个示例中所示。