Я только что начал использовать argparse
, мой код работает, но я пытаюсь проанализировать различные значения того, как пользователь вводит аргумент.Определение различных форм аргументов аргументов аргументов
В настоящее время это мой код:
def setup_args():
"""
Set up args for the tool
"""
parser = argparse.ArgumentParser(
description=("Get all file versions of a status in a project"),
formatter_class=argparse.RawDescriptionHelpFormatter)
# Positional Arguments
parser.add_argument('project',
type=str,
help='Name of the to look into')
parser.add_argument('status',
type=str,
help='Define which status to look into')
# Optional Arguments
parser.add_argument('-o',
'--output',
action='store_true',
help='Write to output to text file if used')
if __name__ == "__main__":
args = setup_args()
# Check the status set
status_list = ['Pending', 'Work in Progress', 'Approved', 'Rejected']
if not args.status in site_list:
raise ValueError("Please input one of the status : 'Pending', 'Work in Progress', 'Approved', 'Rejected'")
output_query(args.project, status, args.client, args.output)
Как вы можете увидеть в моем main
.. Он регистрирует только те имена, статус регистрозависимых, что я определил. Есть ли способы, в которых я также могу сделать свой код зарегистрированным, если они напечатаны небольшими шапками - 'pending', 'work in progress', 'approved', 'rejected'
или короткими формами - 'p', 'wip', 'a', 'r'
?
Один из пути я могу реализовать это с помощью if..elif..
if args.client == ('pending' or 'p'):
args.client = 'Pending'
elif args.client == ('work in progress' or 'wip'):
args.client = 'Work in Progress'
elif args.client == ('approved' or 'a'):
args.client = 'Approved'
elif args.client == ('rejected' or 'r'):
args.client = 'Rejected'
Хотя это работает, это выглядит немного «скучный» для меня. Если у меня есть несколько аргументов, это означает, что мне нужно будет добавить много if...elif...
, которые могут быть непрактичными, если только это не единственный способ. Есть ли лучшее решение, чтобы обойти это?
EDIT:
Это, как я управлял моей командой: python prog.py my_project Pending
, но я имею в виде сценариев, где один можно ввести так: python prog.py my_project pending
или python prog.py my_project p
, обратите внимание, что заглавные буквы P стала маленькой буквой.
Это по существу, как у выходного аргумента у вас есть работы, верно? Можете ли вы просто так сделать? поставьте короткое имя сначала, затем длинную версию – denvaar