通过arg执行功能

时间:2013-10-08 14:56:10

标签: python argparse

我想要做的是当我输入一个特定的参数时它会启动一个函数,这可以通过argparse来实现。因此,如果我在我的应用程序中点击add参数,它会触发“添加”功能。

parser = argparse.ArgumentParser(description='to do list')
parser.add_argument('-a', '--add', help='add an item to the todo list')
parser.add_argument('-r', '--remove',)
parser.add_argument('-l', '--list',)
args = parser.parse_args()

def add(args):
    conn = sqlite3.connect('todo.db')
    c = conn.cursor()
    c.execute("INSERT INTO todo VALUES (args.add, timestamp)")

2 个答案:

答案 0 :(得分:7)

当然,您可以使用add作为type参数:

def add(args):
    conn = sqlite3.connect('todo.db')
    c = conn.cursor()
    c.execute("INSERT INTO todo VALUES (args, timestamp)")

parser.add_argument('-a', '--add', type=add)

如果这还不够好,你可以继承argparse.Action并且几乎每次遇到参数时都会让argparse做你想做的事。

答案 1 :(得分:3)

以下是我对您的问题的评论的精神解决方案:

parser = argparse.ArgumentParser(description='to do list')
parser.add_argument('-a', '--add', action='append', help='add an item to the todo list')
parser.add_argument('-r', '--remove',)
parser.add_argument('-l', '--list',)
args = parser.parse_args()

def add(args):
    conn = sqlite3.connect('todo.db')
    c = conn.cursor()
    c.execute("INSERT INTO todo VALUES (args.add, timestamp)")

for item in args.add:
    add(item)

这只是收集解析时要添加到数据库的项目。解析完成后,您可以在累积列表中的每个项目上调用add


如果您的预期用途允许,触发任意一段代码的另一个选项是使用子命令,其使用看起来像

$ myscript add "Get milk on the way home"
$ myscript add "Set DVR to record game"
$ myscript list

使用子命令可以指示myscript应采取特定操作,而不是设置配置选项。我将实施作为练习;有关详细信息,请参阅the docs