通过Python点击根据指定选项Key调用方法

问题描述 投票:0回答:1

我检查了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

杀死进程

python python-click
1个回答
2
投票

可能您必须使用

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
© www.soinside.com 2019 - 2024. All rights reserved.