Как использовать необязательные аргументы командной строки в функции python? - PullRequest
1 голос
/ 19 февраля 2020

Я хочу более компактный и масштабируемый способ использования аргументов командной строки для подачи python функции, вот что у меня есть:

def getRelevant (number = 5, sortBy = "Change"):
    number, sortBy = int(number), sortBy
    relevant = ...
    return relevant

if __name__ == "__main__":
    if len(sys.argv) == 3:
        print(getRelevant(sys.argv[1], sys.argv[2]))
    elif len(sys.argv) == 2:
        print(getRelevant(sys.argv[1]))
    else:
        print(getRelevant())

Это работает. Но я не доволен этим условием, есть ли способ сделать его проще?

Ответы [ 3 ]

2 голосов
/ 19 февраля 2020

Argparse должен сделать это. Это многофункциональный и гибкий. Для вашего случая ниже работает:

import argparse
parser = argparse.ArgumentParser(description='Description of your app here.')
parser.add_argument('-N', '--integers', default=5,  help='your help text here')
parser.add_argument('-S', '--sortby', default='Change', choices=['Change', 'SomeOtherOption'], help='some help text here ')

if __name__ == "__main__":
  args = parser.parse_args()
  print(args.integers) # prints 5 if nothing provided
  print(args.sortby)  # prints 'Change' if nothing provided
2 голосов
/ 19 февраля 2020

Вы можете попробовать с argparse или Typer

argparse: https://docs.python.org/3/library/argparse.html

typer: https://typer.tiangolo.com/

1 голос
/ 19 февраля 2020

argparse - это, конечно, инструмент, который вы хотите изучить для параметров и аргументов командной строки - это часть инструментов, о которых должны знать все разработчики (с logging и pdb).

Это существо сказал, что для этого конкретного случая, вы также можете решить проблему очень просто без argparse:

if __name__ == "__main__":
    args = sys.argv[1:]
    print(getRelevant(*args))
...