相关疑难解决方法(0)

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

我想使用一些有用的函数作为命令.为此我正在测试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万
查看次数

一个没有名字的命令,在 Click

我想要一个命令行工具,其用法如下:

$ program <arg>            does something, no command name required
$ program cut <arg>
$ program eat <arg>
Run Code Online (Sandbox Code Playgroud)

Click 代码如下所示:

@click.group()
def main() :
    pass

@main.command()
@click.argument('arg')
def noname(arg) :
    # does stuff

@main.command()
@click.argument('arg')
def cut(arg) :
    # cuts stuff

@main.command()
@click.argument('arg')
def eat(arg) :
    # eats stuff
Run Code Online (Sandbox Code Playgroud)

我的问题是,对于这段代码,总是有一个必需的命令名称,即:我需要运行$ program noname arg. 但我希望能够运行$ program arg.

python python-click

6
推荐指数
3
解决办法
2533
查看次数

单击:在具有上下文对象的链接命令中使用另一个函数

我最近一直在使用click 包来构建命令行界面,到目前为止,它运行良好。

现在我在将链接命令与上下文对象结合使用时遇到了一些麻烦。问题是当我想从另一个命令中调用另一个命令的函数时,我以某种方式收到错误。

这可能与 click 中装饰器的使用有某种关系,但我现在没有看到错误。

这是我的代码的最小示例:

import click


@click.group(chain=True)
@click.option('--some_common_option', type=float, default=1e-10)
@click.pass_context
def cli(ctx, some_common_option):
    # save shared params within context object for different commands
    for k, v in locals().items():
        if 'ctx' not in k:
            ctx.obj[k] = v

    return True


@cli.command()
@click.argument('some_argument', type=str)
@click.pass_context
def say_something(ctx, some_argument):
    print(some_argument)

    return True


@cli.command()
@click.argument('some_other_argument', type=str)
@click.pass_context
def say_more(ctx, some_other_argument):
    ctx.obj['text'] = some_other_argument
    say_something(ctx, ctx.obj['text'])

    return True


if __name__ == '__main__':
    cli(obj={})
Run Code Online (Sandbox Code Playgroud)

这是终端上提供的错误:

$ python test.py say_something 'Hello!'
Hello! …
Run Code Online (Sandbox Code Playgroud)

python python-click

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