Llame a otro comando de clic desde un comando de clic
Quiero usar algunas funciones útiles como comandos. Para eso estoy probando elclick
biblioteca. Definí mis tres funciones originales y luego las decoré comoclick.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
De esta manera puedo generar los tres comandosadd_name
, add_surname
yadd_name_and_surname
usando unsetup.py
archivo ypip install --editable .
Entonces puedo canalizar:
$ echo "original content" | add_name | add_surname
original content
added name
added surname
Sin embargo, hay un pequeño problema que debo resolver al componer con diferentes comandos de clic como funciones:
$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
)
No tengo idea de por qué no funciona, necesito estoadd_name_and_surname
comando para llamaradd_name
yadd_surname
no como comando sino como funciones, de lo contrario, anula mi propósito original de usar funciones como funciones y comandos de la biblioteca.