Python é amplamente conhecido por sua versatilidade e facilidade de uso, especialmente ao construir aplicativos de interface de linha de comando (CLI). Se você deseja automatizar tarefas rotineiras, construir ferramentas de desenvolvedor ou criar scripts flexíveis, o rico ecossistema do Python oferece várias bibliotecas para lidar com CLI de forma eficiente.
Nesta postagem do blog, nos aprofundaremos no trabalho com CLIs em Python, abordando o seguinte:
Ao final desta postagem, você estará equipado para criar aplicativos de linha de comando robustos e fáceis de usar.
CLIs são amplamente utilizadas em administração de sistemas, processamento de dados e desenvolvimento de software porque oferecem:
Python oferece várias bibliotecas para construir ferramentas CLI:
sys.argv é uma maneira básica de acessar argumentos de linha de comando. Ele armazena os argumentos da linha de comando como uma lista, onde o primeiro elemento é sempre o nome do script.
import sys # Command-line arguments print(f"Script Name: {sys.argv[0]}") print(f"Arguments: {sys.argv[1:]}")
Executando o script:
$ python script.py arg1 arg2 arg3 Script Name: script.py Arguments: ['arg1', 'arg2', 'arg3']
O módulo argparse é a biblioteca padrão do Python para criação de CLIs. Ele oferece mais controle do que sys.argv e gera automaticamente mensagens de ajuda e tratamento de erros.
import argparse parser = argparse.ArgumentParser(description="A simple CLI tool") parser.add_argument("name", help="Your name") parser.add_argument("--greet", help="Custom greeting", default="Hello") args = parser.parse_args() print(f"{args.greet}, {args.name}!")
Executando o script:
$ python script.py Alice Hello, Alice! $ python script.py Alice --greet Hi Hi, Alice!
Exemplo com verificação de tipo e opções:
parser.add_argument("age", type=int, help="Your age") parser.add_argument("--format", choices=["json", "xml"], help="Output format")
Executando o script:
$ python script.py Alice 30 --format json
click é uma biblioteca mais avançada para criar interfaces de linha de comando. Ele fornece uma abordagem baseada em decorador para definir comandos, subcomandos e opções.
import click @click.command() @click.option('--name', prompt='Your name', help='The person to greet.') @click.option('--greet', default="Hello", help='Greeting to use.') def greet(name, greet): """Simple program that greets NAME with a GREET.""" click.echo(f'{greet}, {name}!') if __name__ == '__main__': greet()
Executando o script:
$ python greet.py --name Alice --greet Hi Hi, Alice!
Você pode criar ferramentas CLI mais complexas com vários subcomandos.
import click @click.group() def cli(): pass @cli.command() def start(): click.echo("Starting the application...") @cli.command() def stop(): click.echo("Stopping the application...") if __name__ == '__main__': cli()
Executando o script:
$ python app.py start Starting the application... $ python app.py stop Stopping the application...
Não importa qual biblioteca você usa, o tratamento de erros é crucial para fornecer uma experiência de usuário tranquila.
Se um argumento obrigatório estiver faltando, argparse gerará um erro e exibirá instruções de uso:
$ python script.py usage: script.py [-h] name script.py: error: the following arguments are required: name
Com o clique, você pode gerar exceções personalizadas e lidar com erros normalmente usando decoradores.
@click.command() @click.option('--count', type=int, help='Number of repetitions') def repeat(count): if count is None or count
Combinando argparse e clique com outras bibliotecas
Para estender a funcionalidade CLI, você pode combinar argparse ou click com outras bibliotecas como os, subprocess ou até mesmo bibliotecas personalizadas.
Exemplo: Combinando argparse com os
import os import argparse parser = argparse.ArgumentParser(description="File operations CLI") parser.add_argument("filename", help="Name of the file to check") parser.add_argument("--create", action="store_true", help="Create the file if it does not exist") args = parser.parse_args() if os.path.exists(args.filename): print(f"{args.filename} already exists.") else: if args.create: with open(args.filename, 'w') as f: f.write("New file created.") print(f"{args.filename} created.") else: print(f"{args.filename} does not exist.")Executando o script:
$ python filecli.py example.txt --create example.txt created.
Empacotando sua ferramenta CLI
Para distribuir sua ferramenta CLI, você pode empacotá-la usando setuptools e torná-la acessível globalmente em qualquer sistema.
Etapa 1: Crie um arquivo setup.py
from setuptools import setup setup( name='greet-cli', version='0.1', py_modules=['greet'], install_requires=[ 'click', ], entry_points=''' [console_scripts] greet=greet:greet ''', )Etapa 2: Instale sua CLI localmente
$ pip install --editable .Agora, o comando greet está disponível globalmente:
$ greet --name Alice Hello, Alice!Distribuir no PyPI
Para distribuir sua ferramenta publicamente, crie uma conta PyPI e siga as etapas para enviar seu pacote:
- Construa o pacote:
python setup.py sdist bdist_wheel
- Carregue o pacote:
twine upload dist/*
Práticas recomendadas para construção de CLIs
- Forneça mensagens de ajuda claras: sempre inclua --help para orientar os usuários.
- Validar entradas: Use verificação de tipo e trate exceções normalmente.
- Projete comandos intuitivos: certifique-se de que sua estrutura de comandos seja lógica e fácil de usar.
- Teste com casos extremos: certifique-se de que sua ferramenta CLI se comporte corretamente mesmo com entradas inválidas.
- Modularize seu código: mantenha sua lógica de linha de comando separada de sua funcionalidade principal para testes e manutenção mais fáceis.
Conclusão
Python fornece um excelente kit de ferramentas para construir aplicativos de interface de linha de comando (CLI). Esteja você usando o módulo argparse integrado ou o clique com mais recursos, você pode criar ferramentas poderosas e fáceis de usar que podem automatizar fluxos de trabalho, processar dados e aumentar a produtividade.
Agora que você aprendeu os recursos básicos e avançados para trabalhar com CLI em Python, é hora de colocá-los em prática. Crie sua própria ferramenta, compartilhe-a ou até mesmo distribua-a globalmente!
Sinta-se à vontade para entrar em contato com perguntas ou sugestões:
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3