Python argparse:在添加其他参数之前处理某些参数

时间:2017-05-16 00:35:22

标签: python python-2.7 argparse

使用python的argparse库,我想处理前几个命令行参数,并使用它们生成其他命令行参数的选项列表。

如果没有argparse抱怨它不期望的额外参数(我打算稍后添加),我如何处理前几个参数?

例如,我有一个脚本从命令行获取用户名和密码,使用这些脚本访问API的可用属性,然后使用该列表限制第三个参数的值:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('username', help='Your username.')
parser.add_argument('password', help='Your password.')
args = parser.parse_args() # Error here because a third argument exists on the command-line

response = requests.get(
    url='https://api.example.com/properties',
    auth=(args.username, args.password)
)

parser.add_argument(
    'property',
    choices=response.json()['properties'], # Validates the input
    help='The property you want to access.'
)
args = parser.parse_args()

我知道我可以立即添加所有参数,然后手动验证第三个参数,但我想知道是否有办法在argparse库中本地执行我要求的内容?

1 个答案:

答案 0 :(得分:1)

spark-2.1.0/conf

parser = argparse.ArgumentParser() parser.add_argument('username', help='Your username.') parser.add_argument('password', help='Your password.') parser.add_argument( 'property', help='The property you want to access.' ) args = parser.parse_args() response = requests.get( url='https://api.example.com/properties', auth=(args.username, args.password) ) allowed_properties = response.json()['properties'] if args.property not in allowed_properties: parser.error('property not in allowed properties') 不是一个复杂的测试。我建议解析所有输入,然后测试这种特殊情况。总的来说,我认为可以为您提供更好的控制,更好的帮助和错误显示。

choices方法很好学习并偶尔使用,但我认为这种情况并不好。在parse_known_args

中嵌入所有参数测试都没有任何额外的分数