Como criar uma CLI em python

De maneira fácil e rápida, é possível criar uma Command Line Interface em Python

Itanú Romero
3 min readOct 11, 2021

Uma de minhas últimas experiências de programação foi criar uma Command Line Interface (CLI), que nada mais é do que uma ferramenta de linha de comando que pode ser executada em um terminal.

Mesmo sendo criada em python, ela não precisa ser executada com ele para iniciar seus processos, e isso abre muitas portas para diversas possibilidades.

Para exemplificar como foi meu processo ao criar a CLI, resolvi criar um pequeno projeto que surgiu na minha mente há pouco tempo: um sistema onde tu coloca a extensão de arquivo que tu quer conhecer sobre e ele faz conexão com a wikipedia para descobrir com apenas um comando do que se trata, vamos nessa?

Ah, se quiser dar uma olhada no código já pronto, acesse: https://github.com/ItanuRomero/extensionCLI

Estrutura de uma CLI em python

A primeira vez que pensei em criar uma ferramenta de linha de comando me pareceu que seria difícil, porém é quase o extremo contrário.

Claro que depende muito do tamanho do projeto, mas para poder criar algo funcional apenas precisamos de uma estrutura simples como essa abaixo:

pasta_principal/
├── README.md
├── install.sh
├── extension
├── __init__.py
├── __main__.py
└── search_handler.py
└── setup.py

pasta_principal/

É a raiz do projeto, dentro dela que colocaremos os arquivos e outros diretórios.

README.md & install.sh

Opcionais, servindo para documentar o seu projeto e fazer a instalação diretamente sem utilizar o pip install (mais abaixo eu explico), respectivamente.

extension

É a estrutura de um python package, que seria o mesmo que um diretório, porém com um arquivo __init__.py que faz o papel de indicar ao python que isso se trata de um package.

Outro arquivo é o __main__.py, que é o principal arquivo do sistema, centralizando tudo que será chamado pelo comando ext, ou seja, é o que será executado primeiro no sistema, e todo o resto do fluxo deve seguir a partir dele e de sua função main(), como pode ser visto no projeto no GitHub.

O terceiro arquivo, search_handler.py, é um módulo python, que é um arquivo python que serve como um agregador de funções, utilizado para organizar melhor o código.
Ele possui uma biblioteca chamada wikipedia que faz o contato com o site de mesmo nome, assim retornando o resultado!

setup.py

Responsável por fazer a mágica de deixar o seu código instalável, basicamente ele cria sua CLI, e não precisa ser mais complexo que isso:

from setuptools import setup
setup(
name = 'extension',
version = '0.1.0',
packages = ['extension'],
entry_points = {
'console_scripts': [
'ext = extension.__main__:main'
]
})

O argumento responsável por executar o sistema é o “ext”, ele irá executar os processos que estiverem no caminho: extension.__main__.main()

Para fazer a instalação, é necessário utilizar o pip install do python, e com ele usaremos também a flag -e para sinalizar que queremos atualizar o código assim que o projeto sofrer alterações (de forma automática), e por último, diremos ao pip que iremos instalar o diretório atual, colocando um ponto (.).

pip install -e .

Esse comando irá executar o setup.py do diretório informado, que nesse caso é o pasta_principal/, e o retorno deve ser algo como:

Pronto, agora é só utilizar o sistema digitando o comando + uma extensão de arquivo, como abaixo:

Agora outro exemplo com a extensão mp3:

Pronto, e agora tu pode criar suas command line interfaces e colocar algumas de suas ideias mais legais em prática!
Boa sorte e bons estudos! Um abraço!

Ah, eu me baseei nesse artigo pra criar CLI’s assim: https://trstringer.com/easy-and-nice-python-cli/

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Itanú Romero
Itanú Romero

Written by Itanú Romero

Software Engineer — Problem solver — Technology enthusiastic

No responses yet

Write a response