我有以下代码:
import click
@click.group()
def cli():
pass
@click.command()
def initdb():
click.echo('Initialized the database')
@click.command()
def dropdb():
click.echo('Dropped the database')
cli.add_command(initdb)
cli.add_command(dropdb)
在命令行中,我希望能够执行以下操作:
python clicktest.py cli initdb
并在终端发生以下回声:
Initialized the database
或进入终端:
python clicktest.py cli dropdb
并在终端上发生以下情况:
Dropped the database
我的问题是当我在终端上执行此操作时:
python clicktest.py cli initdb
在终端没有任何事情发生,当我认为某些东西应该打印时,没有什么东西可以打印出来,即“初始化数据库”'回声。我做错了什么?
答案 0 :(得分:1)
首先,您应该在命令行中使用它,如:
python clicktest.py initdb
python clicktest.py dropdb
在clicktest.py
文件中,将这些行放在代码的底部:
if __name__ == '__main__':
cli()
除非你的代码不能上班。
编辑:
如果您真的想以python clicktest.py cli initdb
的方式使用它,那么您还有另一种选择:
@click.group()
def main():
pass
@click.group()
def cli():
pass
@click.command()
def initdb():
click.echo('Initialized the database')
@click.command()
def dropdb():
click.echo('Dropped the database')
cli.add_command(initdb)
cli.add_command(dropdb)
main.add_command(cli)
if __name__ == '__main__':
main()
甚至更好(改为使用装饰器):
@click.group()
def main():
pass
@main.group()
def cli():
pass
@cli.command()
def initdb():
click.echo('Initialized the database')
@cli.command()
def dropdb():
click.echo('Dropped the database')
if __name__ == '__main__':
main()