使用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库中本地执行我要求的内容?
答案 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
。