我检查了python click document,好像没有多选项切换操作。我想click根据选项选择指定的函数来执行。
演示.py
import click
@click.command()
@click.option('-f', '--file', 'key', help='make file')
@click.option('-k', '--kill', 'key', help='kill proc')
@click.option('-p', '--proj', 'key', help="get proc")
def main(key):
click.echo(key)
def make_file():
print("make file")
def kill_proc():
print("kill proc")
def get_proc():
print("get proc")
if __name__ == '__main__':
main()
预期结果:
python demo.py -k 8080
杀死进程
可能您必须使用
if/else
来运行预期的命令。
但是你可以使用
@click.group()
来创建子命令
import click
@click.group(chain=True)
def main():
pass
@main.command('m')
#@click.option('-k', '--key', help="proc ID")
@click.argument('key')
def make_file(key):
print("make file", key)
@main.command('k')
#@click.option('-k', '--key', help="proc ID")
@click.argument('key')
def kill_proc(key):
print("kill proc", key)
@main.command('p')
#@click.option('-k', '--key', help="proc ID")
@click.argument('key')
def get_proc(key):
print("get proc", key)
if __name__ == '__main__':
main()
然后你可以运行命令而不需要
-
(命令可能有自己的选项
script.py k 8000
script.py p 8000
因为我在
chain=True
中使用了group
所以我可以一起跑步
script.py k 8000 p 8000
编辑:
如果没有
group
,您可能必须使用 if/else
和唯一的选项名称
import click
@click.command()
@click.option('-f', '--file', 'f_key', help='make file')
@click.option('-k', '--kill', 'k_key', help='kill proc')
@click.option('-p', '--proj', 'p_key', help="get proc")
def main(f_key, k_key, p_key):
#print(f_key, k_key, p_key)
if f_key:
make_file(f_key)
if k_key:
kill_proc(k_key)
if p_key:
get_proc(p_key)
def make_file(key):
print("make file", key)
def kill_proc(key):
print("kill proc", key)
def get_proc(key):
print("get proc", key)
if __name__ == '__main__':
main()
您也可以一次运行多个选项,但命令不能有自己的选项。
script.py -p 8000 -k 1234