根据命令行参数调用python函数

时间:2019-02-05 07:20:34

标签: 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()

但是有更好的方法吗?

5 个答案:

答案 0 :(得分:3)

您可以像这样制作字典

d = {"a" : a,
     "b" : b}

然后发送

d[args.function]()

答案 1 :(得分:1)

也许您正在寻找像click这样的图书馆?它使您可以轻松地使用装饰器添加命令行子命令。

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

答案 2 :(得分:0)

尝试使用eval
eval(function_name_passed_as_argument + "()")

def a():
   pass

def b():
   pass 
eval(args.function + "()")  

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

答案 3 :(得分:0)

您已经指出要制作字典,但是您将如何处理错误的输入呢?我将创建一个默认方法并使用dict.get方法:

def fallback():
    print('That command does not exist')
    # add any code you want to be run for
    # a bad input here...

functions = {
    'a': a,
    'b': b
}

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

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

答案 4 :(得分:0)

Python有几个内置函数,例如Argparse,我们可以利用此函数,这种方法在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