Sh – gerenciamento de comandos shell em Python

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que é a biblioteca Sh

Em muitos projetos Python, surge a necessidade de executar comandos shell: gerenciar arquivos, iniciar processos do sistema ou interagir com ferramentas CLI instaladas. É possível usar os.system ou subprocess, mas eles são verbosos e exigem tratamento manual de argumentos, erros e saídas.

A biblioteca Sh oferece uma maneira limpa e pythonica de chamar comandos shell como se fossem funções Python comuns. Ela simplifica drasticamente a integração de utilitários externos, tornando o código legível e fácil de depurar.

Vantagens de usar Sh

A biblioteca Sh possui diversas vantagens importantes sobre os métodos padrão de execução de comandos do sistema:

Legibilidade e simplicidade de sintaxe – os comandos se parecem com funções Python comuns, tornando o código mais compreensível e fácil de manter.

Gerenciamento automático de erros – a biblioteca trata automaticamente os códigos de retorno e lança exceções em caso de falhas.

Segurança – proteção contra injeção de comandos graças ao escape correto de argumentos.

Flexibilidade – suporte a pipelines, execução em segundo plano, entrada e saída em fluxo contínuo e muitos outros recursos.

Instalação e importação

A instalação da biblioteca é feita via pip:

pip install sh

Para usar no código, basta um único import:

import sh

Princípios básicos de funcionamento

O Sh mapeia automaticamente o nome de qualquer comando shell para uma função Python. Isso permite chamá-los de forma natural:

print(sh.ls("-l"))

Cada chamada retorna um objeto contendo a saída padrão (stdout), que pode ser convertida em string, lista de linhas, bytes e outros formatos.

Uso básico

Trabalhando com arquivos

# Listar arquivos
print(sh.ls("-lah"))

# Criar arquivo
sh.touch("arquivo.txt")

# Copiar arquivo
sh.cp("arquivo.txt", "copia.txt")

# Remover arquivo
sh.rm("copia.txt")

# Criar diretório
sh.mkdir("pasta_teste")

# Mover arquivo
sh.mv("arquivo.txt", "pasta_teste/")

Trabalhando com texto

# Exibir conteúdo do arquivo
conteudo = sh.cat("arquivo.txt")
print(str(conteudo))

# Pesquisar em arquivos
resultados = sh.grep("python", "*.py")
for resultado in resultados:
    print(resultado.strip())

# Contar linhas
num_linhas = sh.wc("-l", "arquivo.txt")
print(f"Número de linhas: {num_linhas.strip()}")

Trabalhando com argumentos e opções

O Sh suporta diversas formas de passar argumentos para os comandos:

Argumentos posicionais

sh.ls("--color", "auto", "/home/usuario")

Argumentos nomeados

# Opções longas
sh.ls(color="auto", all=True, human_readable=True)

# Opções curtas
sh.ls(a=True, l=True, h=True)

Abordagem combinada

# Uso misto
sh.find("/home", name="*.py", type="f")

Processamento da saída dos comandos

Obtendo o resultado como string

saida = sh.ls()
print(str(saida))

Processamento linha a linha

for linha in saida:
    print(linha.strip())

Trabalhando com bytes

saida_bruta = sh.ls()
dados_bytes = saida_bruta.stdout

Dividindo em lista de linhas

linhas = str(sh.ls()).split('\n')
for linha in linhas:
    if linha.strip():
        print(linha)

Gerenciamento de erros

A biblioteca Sh oferece mecanismos poderosos para tratamento de erros:

Tratamento básico de erros

Recommendations