Como Executar um Comando do Sistema com Python

Ana Maria Gomes
5 minutos de leitura

Conteúdos do tutorial

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.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial
Tags: