如何在 python 中使用 click 创建一个命令行程序,该程序将 运行 不同脚本的命令参数分开?
How do I make a command line program using click in python that takes separates command parameters that run different scripts?
我有以下代码:
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
终端没有任何反应,当我认为应该有什么东西时没有打印,即 'Initialized Database' 回显。我做错了什么??
首先,您应该在命令行中使用它,例如:
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()
我有以下代码:
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
终端没有任何反应,当我认为应该有什么东西时没有打印,即 'Initialized Database' 回显。我做错了什么??
首先,您应该在命令行中使用它,例如:
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()