Tutoriais

Como Executar um Comando do Sistema com Python

Ana Maria Gomes 26 fev Intermediário 5xp
Compartilhar

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 gratuitos para continuar aprendendo

Curso
Grátis · 2h 13min

Aprenda sobre variáveis, loops e funções e crie seu primeiro projeto Python em apenas 2 horas!

Curso
Grátis · 3h 47min

Saia do zero e analise dados com Python e Pandas neste curso gratuito com certificado!

Curso
Grátis · 4h 11min

Aprenda a programar com Python e explore a inteligência artificial! Crie um chatbot prático que interage com seus próprios dados. Comece agora!

Ver todos os cursos

0 comentários

Exclusivo PRO
Faça parte da discussão

Comente e participe da conversa

Crie sua conta gratuita e compartilhe sua opinião nos comentários.

Entre para a Asimov