我想要做的是当我输入一个特定的参数时它会启动一个函数,这可以通过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)")
答案 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。