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
Também na biblioteca
ARKit para Swift: Guia completo com exemplos práticos
Configuração de aplicações PHP: bibliotecas e ferramentas para configuração flexível
Event Bus e padrão Observer em PHP: implementação e exemplos