0

我有以下代码:

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

终端什么都没有发生,当我认为应该有什么东西时,什么也没有打印出来,即“初始化数据库”回声。我究竟做错了什么??

4

1 回答 1

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()
于 2017-04-03T07:48:39.590 回答