基于命令行参数调用python函数

基于命令行参数调用python函数,python,Python,我有一个具有多个功能的脚本: def a(): pass def b(): pass def c(): pass 根据设计,将根据cmd行参数调用它。我可以创建几个if语句,用于计算应该运行哪个函数: if args.function == "a": a() elif args.function == "b": b() elif args.function == "c": c() 但是有没有更好的方法呢 你可以这样编一本字典 d = {"a"

我有一个具有多个功能的脚本:

def a():
   pass

def b():
   pass 

def c():
   pass
根据设计,将根据cmd行参数调用它。我可以创建几个if语句,用于计算应该运行哪个函数:

if args.function == "a":
    a()

elif args.function == "b":
    b()
elif args.function == "c":
    c()

但是有没有更好的方法呢

你可以这样编一本字典

d = {"a" : a,
     "b" : b}
然后发送

d[args.function]()
尝试使用eval evalfunction\u name\u作为参数传递


这不需要使用if-else逻辑。作为参数传递的函数名将直接执行。

也许您正在寻找类似的库?它使您可以轻松地添加带有修饰符的命令行子命令

import click

@click.group()
def cli():
    pass

@cli.command()
def a():
   print("I am a")

@cli.command()
def b():
   print("Je suis b")

if __name__ == '__main__':
    cli()
样本输出:

bash$ ./ick.py --help
Usage: ick.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  a
  b

bash$ ./ick.py a
I am a

正如前面所指出的,你制作了一本字典,但是你将如何处理一个错误的输入?我将创建一个默认方法并使用dict.get方法:

然后通过检索函数来调用该函数:

functions.get(args.function.lower(), fallback)()

Python有几个我们可以利用的内置函数,例如,这种方法在Python中非常常见,用于命令行可编程应用程序。 基本要素:

import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
通过此方法,您可以获得如下内容:

$ python3 prog.py -v
verbosity turned on
$ python3 prog.py --help
usage: prog.py [-h] [-v]

optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose  increase output verbosity

你没有描述它有什么帮助。我看到了输出,但当调用'-v'选项时,不知道引擎盖下面是什么。也许您可以像示例中那样做。它们使用args.acculate,这将调用用acculate编写的函数,即sum或max。我认为如果在acculate中传递a、b或c,它也应该工作。
import argparse
parser = argparse.ArgumentParser()
parser.parse_args()
$ python3 prog.py -v
verbosity turned on
$ python3 prog.py --help
usage: prog.py [-h] [-v]

optional arguments:
  -h, --help     show this help message and exit
  -v, --verbose  increase output verbosity