Ao trabalhar com Python, você pode se deparar com a necessidade de executar um comando do sistema com Python ou rodar um programa externo assim como faria a partir da linha de comando. Podemos fazer isso usando as bibliotecas internas do Python, e neste artigo, exploraremos como fazer isso de maneira segura e eficaz.
Usando o Módulo subprocess
A maneira recomendada de executar um comando do sistema em Python é usando o módulo subprocess
. Este módulo fornece uma interface poderosa para gerar novos processos, conectar-se aos seus pipes de entrada/saída/erro e obter seus códigos de retorno.
Aqui está um exemplo simples usando subprocess.run
, que está disponível no Python 3.5 e posteriores:
import subprocess
subprocess.run(["ls", "-l"])
Este código irá listar o conteúdo do diretório atual em formato longo, assim como se você tivesse digitado ls -l
no seu terminal.
Por Que Não Usar os.system?
Embora você possa encontrar a função os.system
, ela não é recomendada para executar comandos externos. Ela é menos segura e também carece da flexibilidade de subprocess.run
, que permite capturar a saída padrão, o erro padrão e oferece um melhor tratamento de erros.
Para Python 3.4 e Anteriores
Se você estiver trabalhando com Python 3.4 ou anterior, você não terá acesso a subprocess.run
. Em vez disso, você pode usar subprocess.call
:
import subprocess
subprocess.call(["ls", "-l"])
Outros Métodos para Executar Comandos
os.system e os.popen
os.system
e os.popen
são funções mais antigas que podem executar comandos do shell. os.system
executa o comando e os.popen
fornece um objeto semelhante a um arquivo para interagir com o processo:
import os
# Usando os.system
os.system("echo Olá Mundo")
# Usando os.popen
print(os.popen("ls -l").read())
No entanto, esses métodos são menos seguros e exigem um manuseio manual da escapagem de caracteres do shell.
subprocess.Popen
Para interações mais complexas com comandos externos, subprocess.Popen
é uma escolha versátil. É um pouco mais complexo, mas oferece controle abrangente sobre o processo:
import subprocess
p = subprocess.Popen('ls', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in p.stdout.readlines():
print(line.decode(), end='')
retval = p.wait()
Com Popen
, você pode ler a saída padrão linha por linha e lidar com ela conforme necessário.
Considerações de Segurança
É crucial ter cautela ao executar comandos do sistema, especialmente se qualquer parte do comando vier de entrada do usuário. Sempre garanta que você escape ou sanitize qualquer entrada externa para prevenir vulnerabilidades de segurança, como ataques de injeção de shell.
Resumo
Neste artigo, cobrimos como executar comandos externos em Python usando o módulo subprocess
, que é o método recomendado e mais seguro. Também discutimos por que métodos mais antigos como os.system
e os.popen
são menos seguros e geralmente devem ser evitados. Lembre-se de tratar a entrada do usuário com cuidado para manter a segurança de suas aplicações Python.
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários