如何在 python 函数中使用可选的命令行参数?

How to use optional command line arguments in a python function?

我想要一种更紧凑和可扩展的方式来使用命令行参数来提供 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())

有效。但是我对这个条件不满意,有没有办法让它更简单?

您可以尝试使用 argparse 或 Typer

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

打字员:https://typer.tiangolo.com/

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

argparse 当然是您想要学习命令行选项和参数的工具 - 它是所有开发人员都应该知道的工具的一部分(使用 loggingpdb)。

话虽这么说,对于这种情况,您也可以非常简单地解决问题而无需 argparse:

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