Crie um aplicativo de linha de comando com Python em 7 etapas fáceis - KDnuggets

Crie um aplicativo de linha de comando com Python em 7 etapas fáceis – KDnuggets

Nó Fonte: 2549521

Crie um aplicativo de linha de comando com Python em 7 etapas fáceis
Imagem do autor
 

Construir projetos simples é uma ótima maneira de aprender Python e qualquer linguagem de programação em geral. Você pode aprender a sintaxe para escrever loops for, usar funções integradas, ler arquivos e muito mais. Mas é só quando você começa a construir algo que você realmente “aprende”.

Seguindo a abordagem de “aprender construindo”, vamos codificar um aplicativo simples de lista de tarefas que podemos executar na linha de comando. Ao longo do caminho, exploraremos conceitos como análise de argumentos de linha de comando e trabalho com arquivos e caminhos de arquivos. Também revisitaremos princípios básicos, como definir funções personalizadas.

Então vamos começar!

Ao codificar este tutorial, você poderá criar um aplicativo de lista de tarefas que pode ser executado na linha de comando. Ok, então o que você gostaria que o aplicativo fizesse? 

Assim como as listas de tarefas no papel, você precisa ser capaz de adicionar tarefas, procurar todas as tarefas e remover tarefas (sim, riscá-las ou marcá-las como concluídas no papel) depois de concluí-las, certo? Então, construiremos um aplicativo que nos permita fazer o seguinte.

Adicione tarefas à lista:
 

Crie um aplicativo de linha de comando com Python em 7 etapas fáceis
Imagem do autor
 

Obtenha uma lista de todas as tarefas da lista:

 

Crie um aplicativo de linha de comando com Python em 7 etapas fáceis
Imagem do autor
 

E também remova uma tarefa (usando seu índice) depois de terminá-la:

 

Crie um aplicativo de linha de comando com Python em 7 etapas fáceis
Imagem do autor
 

Agora vamos começar a codificar!

Primeiro, crie um diretório para o seu projeto. E dentro do diretório do projeto, crie um arquivo de script Python. Este será o arquivo principal do nosso aplicativo de lista de tarefas. Vamos chamá-lo todo.py

Você não precisa de nenhuma biblioteca de terceiros para este projeto. Portanto, certifique-se apenas de estar usando uma versão recente do Python. Este tutorial usa Python 3.11.

No todo.py arquivo, comece importando os módulos necessários. Para nosso aplicativo simples de lista de tarefas, precisaremos do seguinte:

  • argparse para análise de argumentos de linha de comando 
  • os para operações de arquivo

Então, vamos importar os dois:

import argparse
import os

Lembre-se de que usaremos sinalizadores de linha de comando para adicionar, listar e remover tarefas. Podemos usar opções curtas e longas para cada argumento. Para nosso aplicativo, vamos usar o seguinte:

  • -a or --add para adicionar tarefas
  • -l or --list para listar todas as tarefas
  • -r or --remove para remover tarefas usando índice

É aqui que usaremos o módulo argparse para analisar os argumentos fornecidos na linha de comando. Nós definimos o create_parser() função que faz o seguinte:

  • Inicializa um ArgumentParser objeto (vamos chamá-lo parser). 
  • Adiciona argumentos para adicionar, listar e remover tarefas chamando o método add_argument() método no objeto analisador. 

Ao adicionar argumentos, adicionamos as opções curta e longa, bem como a mensagem de ajuda correspondente. Então aqui está o create_parser() função:

def create_parser():
    parser = argparse.ArgumentParser(description="Command-line Todo List App")
    parser.add_argument("-a", "--add", metavar="", help="Add a new task")
    parser.add_argument("-l", "--list", action="store_true", help="List all tasks")
    parser.add_argument("-r", "--remove", metavar="", help="Remove a task by index")
    return parser

Agora precisamos definir funções para realizar as seguintes operações de gerenciamento de tarefas:

  • Adicionando uma tarefa
  • Listando todas as tarefas
  • Removendo uma tarefa pelo seu índice

A seguinte função add_task interage com um arquivo de texto simples para gerenciar itens na lista de tarefas pendentes. Ele abre o arquivo no modo 'anexar' e adiciona a tarefa ao final da lista:

def add_task(task):
    with open("tasks.txt", "a") as file:
    file.write(task + "n")

Observe como usamos o with instrução para gerenciar o arquivo. Isso garante que o arquivo seja fechado após a operação, mesmo se houver um erro, minimizando vazamentos de recursos. 

Para saber mais, leia a seção sobre gerenciadores de contexto para manipulação eficiente de recursos em este tutorial sobre como escrever código Python eficiente.

A list_tasks A função lista todas as tarefas verificando se o arquivo existe. O arquivo é criado somente quando você adiciona a primeira tarefa. Primeiro verificamos se o arquivo existe e depois lemos e imprimimos as tarefas. Se não houver tarefas no momento, receberemos uma mensagem útil. :

def list_tasks():
    if os.path.exists("tasks.txt"):
        with open("tasks.txt", "r") as file:
            tasks = file.readlines()
        	for index, task in enumerate(tasks, start=1):
                print(f"{index}. {task.strip()}")
    else:
        print("No tasks found.")

Também implementamos um remove_task função para remover tarefas por índice. Abrir o arquivo no modo 'gravação' substitui o arquivo existente. Portanto, removemos a tarefa correspondente ao índice e gravamos a lista de tarefas atualizada no arquivo:

def remove_task(index):
    if os.path.exists("tasks.txt"):
        with open("tasks.txt", "r") as file:
            tasks = file.readlines()
        with open("tasks.txt", "w") as file:
            for i, task in enumerate(tasks, start=1):
                if i != index:
                    file.write(task)
        print("Task removed successfully.")
    else:
        print("No tasks found.")

Configuramos o analisador para analisar argumentos de linha de comando. E também definimos as funções para executar as tarefas de adição, listagem e remoção de tarefas. Então o que vem depois?

Você provavelmente adivinhou. Precisamos apenas chamar a função correta com base no argumento de linha de comando recebido. Vamos definir um main() função para analisar os argumentos da linha de comando usando o ArgumentParser objeto que criamos na etapa 3. 

Com base nos argumentos fornecidos, chame as funções de gerenciamento de tarefas apropriadas. Isso pode ser feito usando uma escada if-elif-else simples como esta:

def main():
    parser = create_parser()
    args = parser.parse_args()

    if args.add:
        add_task(args.add)
    elif args.list:
        list_tasks()
    elif args.remove:
        remove_task(int(args.remove))
    else:
        parser.print_help()

if __name__ == "__main__":
    main()

Agora você pode executar o aplicativo de lista de tarefas a partir da linha de comando. Use a opção curta h ou a opção longa helppara obter informações sobre o uso:

$ python3 todo.py --help
usage: todo.py [-h] [-a] [-l] [-r]

Command-line Todo List App

options:
  -h, --help  	show this help message and exit
  -a , --add  	Add a new task
  -l, --list  	List all tasks
  -r , --remove   Remove a task by index

Inicialmente, não há tarefas na lista, então usando --list para listar todas as tarefas imprima “Nenhuma tarefa encontrada.”:

$ python3 todo.py --list
No tasks found.

Agora adicionamos um item à lista de tarefas assim:

$ python3 todo.py -a "Walk 2 miles"

Ao listar os itens agora, você poderá ver a tarefa adicionada:

$ python3 todo.py --list
1. Walk 2 miles

Como adicionamos o primeiro item, o arquivo tasks.txt foi criado (consulte a definição do list_tasks função na etapa 4):

$ ls
tasks.txt  todo.py

Vamos adicionar outra tarefa à lista:

$ python3 todo.py -a "Grab evening coffee!"

E outro:

$ python3 todo.py -a "Buy groceries"

E agora vamos obter a lista de todas as tarefas:

$ python3 todo.py -l
1. Walk 2 miles
2. Grab evening coffee!
3. Buy groceries

Agora vamos remover uma tarefa pelo seu índice. Digamos que terminamos o café da noite (e, esperançosamente, do dia), então o removemos conforme mostrado:

$ python3 todo.py -r 2
Task removed successfully.

A lista de tarefas modificada é a seguinte:

$ python3 todo.py --list
1. Walk 2 miles
2. Buy groceries

Pronto, a versão mais simples do nosso aplicativo está pronta. Então, como podemos levar isso adiante? Aqui estão algumas coisas que você pode tentar:

  • O que acontece quando você usa uma opção de linha de comando inválida (digamos -w or --wrong)? O comportamento padrão (se você se lembra da escada if-elif-else) é imprimir a mensagem de ajuda, mas também haverá uma exceção. Tente implementar o tratamento de erros usando blocos try-except.
  • Teste seu aplicativo definindo casos de teste que incluem casos extremos. Para começar, você pode usar o módulo unittest integrado.
  • Melhore a versão existente adicionando uma opção para especificar a prioridade de cada tarefa. Tente também classificar e recuperar tarefas por prioridade.

▶ ️ O código deste tutorial está no GitHub.

Neste tutorial, construímos um aplicativo de lista de tarefas simples de linha de comando. Ao fazer isso, aprendemos como usar o módulo argparse integrado para analisar argumentos de linha de comando. Também usamos as entradas da linha de comando para executar operações correspondentes em um arquivo de texto simples nos bastidores. 

Então, para onde vamos a seguir? Bem, bibliotecas Python como Tipos facilite a criação de aplicativos de linha de comando. E construiremos um usando Typer em um próximo tutorial de Python. Até então, continue codificando!
 
 

Bala Priya C é um desenvolvedor e redator técnico da Índia. Ela gosta de trabalhar na intersecção entre matemática, programação, ciência de dados e criação de conteúdo. Suas áreas de interesse e especialização incluem DevOps, ciência de dados e processamento de linguagem natural. Ela gosta de ler, escrever, programar e tomar café! Atualmente, ela está trabalhando para aprender e compartilhar seu conhecimento com a comunidade de desenvolvedores criando tutoriais, guias de procedimentos, artigos de opinião e muito mais. Bala também cria visões gerais de recursos envolventes e tutoriais de codificação.

Carimbo de hora:

Mais de KDnuggetsGenericName