Вызовите другую команду щелчка от команды щелчка

Я хочу использовать некоторые полезные функции в качестве команд. Для этого я тестирую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)
    return result

Таким образом, я могу генерировать три командыadd_name, add_surname а такжеadd_name_and_surname используяsetup.py файл иpip install --editable . Тогда я могу трубу:

$ echo "original content" | add_name | add_surname 
original content

    added name
    added surname

Однако есть одна небольшая проблема, которую мне нужно решить, при составлении с различными командами щелчка как функциями:

$echo "original content" | add_name_and_surname 
Usage: add_name_and_surname [OPTIONS] [CONTENT]

Error: Got unexpected extra arguments (r i g i n a l   c o n t e n t 
)

Я понятия не имею, почему это не работает, мне это нужноadd_name_and_surname команда позвонитьadd_name а такжеadd_surname не как команда, а как функция, иначе это противоречит моей первоначальной цели использования функций как библиотечных функций, так и команд.

Ответы на вопрос(2)

Ваш ответ на вопрос