python:从命令行输入函数

时间:2016-06-07 14:21:16

标签: python

我目前正在开发一个小命令行程序,该程序从网站解析电视节目,用户可以在其上调用不同的功能。我将函数存储在字典中,如下所示:

    commands = {"show": show, "show x": showX, "help": TVhelp, "exit": TVexit,
                "actor list": actorList, "actor add x": actorAdd, 
                "actor delete x": actorDel, "recommend": recommend}

当用户键入任何键时,将调用存储为该键值的函数。例如show只显示所有程序的列表,帮助和退出应该是自我解释。

当从命令行调用这些函数时,我只是使用裸函数名称时没有任何问题,但问题是某些函数需要额外的参数(我在这里称之为x)。

当用户例如写出"显示20"应显示程序列表中带有索引20的程序。或当输入是"演员添加阿诺德施瓦辛格"该名称应添加到列表中。

我想要的是可以从命令行调用该函数并附加一个参数,程序识别输入中的函数名称并将数字或actor名称作为参数。

有一种pythonic方法用字典做到这一点吗?

欢呼声

1 个答案:

答案 0 :(得分:1)

首先,我建议您使用argparse。 API很复杂但很有效。

如果你真的想要自己进行参数解析,只需将任何其他参数传递给字典中指定的函数。

def zoo_desc(args):
    y = int(args[2])
    describe_me = zoo[y]
    print ('{}, {}'.format(describe_me[0], describe_me[1]))

def zoo_list(args):
    for index, entry in enumerate(zoo):
        print ('{}: {}'.format(index, entry[0]))

handlers = {
        'zoo list': zoo_list, # List the animals in the zoo.
        'zoo desc': zoo_desc  # Describe the indexed animal, aka 'zoo desc x'
        }

zoo = [
('cat', 'a cute feline'),
('mouse', 'a cute rodent'),
('rat', 'an uncute rodent')
]

x = input()
while (x):
    for a in handlers:
        if x.startswith(a):
            handlers[a](x.split()) # When we call a handler, we also pass it the arguments

    x = input()

输出:

zoo list
0: cat
1: mouse
2: rat
zoo desc 1
mouse, a cute rodent