标签: python-click

如何将具有一组子命令的Click命令拆分为多个文件?

我有一个我开发的大型点击应用程序,但导航不同的命令/子命令变得越来越粗糙.如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?

这是我想如何分开它的一个例子:

在里面

import click

@click.group()
@click.version_option()
def cli():
    pass #Entry Point
Run Code Online (Sandbox Code Playgroud)

command_cloudflare.py

@cli.group()
@click.pass_context
def cloudflare(ctx):
    pass

@cloudflare.group('zone')
def cloudflare_zone():
    pass

@cloudflare_zone.command('add')
@click.option('--jumpstart', '-j', default=True)
@click.option('--organization', '-o', default='')
@click.argument('url')
@click.pass_obj
@__cf_error_handler
def cloudflare_zone_add(ctx, url, jumpstart, organization):
    pass

@cloudflare.group('record')
def cloudflare_record():
    pass

@cloudflare_record.command('add')
@click.option('--ttl', '-t')
@click.argument('domain')
@click.argument('name')
@click.argument('type')
@click.argument('content')
@click.pass_obj
@__cf_error_handler
def cloudflare_record_add(ctx, domain, name, type, content, ttl):
    pass

@cloudflare_record.command('edit')
@click.option('--ttl', '-t')
@click.argument('domain')
@click.argument('name')
@click.argument('type')
@click.argument('content')
@click.pass_obj
@__cf_error_handler
def cloudflare_record_edit(ctx, domain):
    pass
Run Code Online (Sandbox Code Playgroud)

command_uptimerobot.py

@cli.group()
@click.pass_context
def uptimerobot(ctx):
    pass

@uptimerobot.command('add')
@click.option('--alert', …
Run Code Online (Sandbox Code Playgroud)

python command-line-interface python-click

57
推荐指数
4
解决办法
2万
查看次数

Click将中止进一步执行,因为Python 3配置为使用ASCII作为环境的编码

我将Quokka Python/Flask CMS下载到CentOS7服务器.命令一切正常

sudo python3 manage.py runserver --host 0.0.0.0 --port 80
Run Code Online (Sandbox Code Playgroud)

然后我创建一个文件/etc/init.d/quokkacms.该文件包含以下代码

start() {
        echo -n "Starting quokkacms: "
        python3 /var/www/quokka/manage.py runserver --host 0.0.0.0 --port 80
        touch /var/lock/subsys/quokkacms
        return 0
}
stop() {
        echo -n "Shutting down quokkacms: "
        rm -f /var/lock/subsys/quokkacms
        return 0
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)

        ;;
    restart)
        stop
        start
        ;;

    *)
        echo "Usage: quokkacms {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $?
Run Code Online (Sandbox Code Playgroud)

但是我在跑步时遇到错误 sudo service quokkacms start

RuntimeError:Click将中止进一步执行,因为Python 3配置为使用ASCII作为环境的编码.切换到Python 2或参考http://click.pocoo.org/python3/ …

locale redhat centos python-3.x python-click

27
推荐指数
2
解决办法
2万
查看次数

为什么我使用click.argument产生"得到一个意外的关键字参数'帮助'?

运行以下代码会导致此错误:

TypeError:init()得到一个意外的关键字参数'help'

码:

import click

@click.command()
@click.argument('command', required=1, help="start|stop|restart")
@click.option('--debug/--no-debug', default=False, help="Run in foreground")
def main(command, debug):
    print (command)
    print (debug)

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

完整错误输出:

$ python3 foo.py start
Traceback (most recent call last):
  File "foo.py", line 5, in <module>
    @click.option('--debug/--no-debug', default=False, help="Run in foreground")
  File "/home/cbetti/python/lib/python3/dist-packages/click-4.0-py3.4.egg/click/decorators.py", line 148, in decorator
    _param_memo(f, ArgumentClass(param_decls, **attrs))
  File "/home/cbetti/python/lib/python3/dist-packages/click-4.0-py3.4.egg/click/core.py", line 1618, in __init__
    Parameter.__init__(self, param_decls, required=required, **attrs)
TypeError: __init__() got an unexpected keyword argument 'help'
Run Code Online (Sandbox Code Playgroud)

为什么会出现此错误?

python python-click

18
推荐指数
3
解决办法
1万
查看次数

python中的互斥选项组单击

如何在Click中创建互斥选项组?我想要接受标志"--all"或者使用像"--color red"这样的参数选项.

python python-click

18
推荐指数
3
解决办法
4528
查看次数

我应该在哪里实现烧瓶自定义命令(cli)

在flask中创建自定义命令需要访问app,一般是app.py这样创建的:

import click
from flask import Flask

app = Flask(__name__)

@app.cli.command("create-user")
@click.argument("name")
def create_user(name):
    ...
Run Code Online (Sandbox Code Playgroud)

但是,为了不让我的 app.py 膨胀,我想将我的自定义命令放在一个单独的文件中,例如commands.py,但这不起作用,因为我的项目的入口点是app.py,所以我必须导入应用程序commands.py并导入我的命令app.py会导致循环导入错误。

如何在单独的文件中创建自定义命令?

python command-line-interface flask python-click flask-cli

18
推荐指数
2
解决办法
9645
查看次数

从单击命令调用另一个单击命令

我想使用一些有用的函数作为命令.为此我正在测试click库.我定义了我的三个原始函数,然后装饰为click.command:

import click
import os, sys

@click.command()
@click.argument('content', required=False)
@click.option('--to_stdout', default=True)
def add_name(content, to_stdout=False):
    if not content:
        content = ''.join(sys.stdin.readlines())
    result = content + "\n\tadded name"
    if to_stdout is True:
        sys.stdout.writelines(result)
    return result


@click.command()
@click.argument('content', required=False)
@click.option('--to_stdout', default=True)
def add_surname(content, to_stdout=False):
    if not content:
        content = ''.join(sys.stdin.readlines())
    result = content + "\n\tadded surname"
    if to_stdout is True:
        sys.stdout.writelines(result)
    return result

@click.command()
@click.argument('content', required=False)
@click.option('--to_stdout', default=False)
def add_name_and_surname(content, to_stdout=False):
    result = add_surname(add_name(content))
    if to_stdout is True:
        sys.stdout.writelines(result) …
Run Code Online (Sandbox Code Playgroud)

python stdout piping command-line-arguments python-click

17
推荐指数
3
解决办法
1万
查看次数

如何使用Python的单击(命令行界面创建工具包)将变量传递给其他方法

我知道它是新的,但我喜欢点击很多的外观并且很想使用它,但我无法弄清楚如何将变量从main方法传递给其他方法.我使用不正确,还是这个功能还没有?看起来非常基本,所以我确信它会在那里,但这些事情只是出现了一段时间,所以也许不是.

import click

@click.option('--username', default='', help='Username')
@click.option('--password', default='', help='Password')
@click.group()
def main(**kwargs):
    print("This method has these arguments: " + str(kwargs))


@main.command('do_thingy')
def do_thing(**kwargs):
    print("This method has these arguments: " + str(kwargs))


@main.command('do_y')
def y(**kwargs):
    print("This method has these arguments: " + str(kwargs))


@main.command('do_x')
def x(**kwargs):
    print("This method has these arguments: " + str(kwargs))


main()
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,我如何获得其他方法可用的用户名和密码选项

python python-click

14
推荐指数
1
解决办法
7059
查看次数

传递字符串时单击:"获得意外的额外参数"

import click

@cli.command()
@click.argument("namespace", nargs=1)
def process(namespace):
.....

@cli.command()
def run():
    for namespace in KEYS.iterkeys():
        process(namespace)
Run Code Online (Sandbox Code Playgroud)

跑步run('some string')产生:

Error: Got unexpected extra arguments (o m e s t r i n g)

好像Click通过一个字符传递字符串参数.打印参数显示正确的结果.

PS:KEYS字典定义并按预期工作.

python python-click

13
推荐指数
1
解决办法
8004
查看次数

点击和pylint

以下是导致pylint错误的点击使用的简单示例:

@click.command()
@click.option('--option', is_flag=True)
def foo(option):
    click.echo(option)

foo()
Run Code Online (Sandbox Code Playgroud)

foo没有参数,所以我得到了E1120(没有值参数).所以我这样做了:

@click.command()
@click.option('--option', is_flag=True)
def foo(**kwargs):
    click.echo(kwargs["option"])

foo()
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?或者在Visual Studio代码中仅禁用一行的pylint的方法?

python pylint python-3.x python-click visual-studio-code

13
推荐指数
3
解决办法
1698
查看次数

单击命令行界面:如果未设置其他可选选项,则需要选项

在使用Python 点击库编写命令行界面(CLI)时,是否可以定义三个选项,只有在第一个(可选)未设置的情况下才需要第二个和第三个选项?

我的用例是一个登录系统,它允许我通过authentication token(选项1),或者通过username(选项2)和password(选项3)进行身份验证.

如果给出了令牌,则无需检查usernamepassword定义或提示它们.否则,如果忽略了此令牌,然后usernamepassword成为必需的,必须给予.

这可以使用回调以某种方式完成吗?

我的入门代码当然不能反映出预期的模式:

@click.command()
@click.option('--authentication-token', prompt=True, required=True)
@click.option('--username', prompt=True, required=True)
@click.option('--password', hide_input=True, prompt=True, required=True)
def login(authentication_token, username, password):
    print(authentication_token, username, password)

if __name__ == '__main__':
    login()
Run Code Online (Sandbox Code Playgroud)

python command-line-interface python-click

12
推荐指数
2
解决办法
5756
查看次数