Escapando argumentos de comando em chamadas os.system()
Ao trabalhar com os.system() em Python, garantir o tratamento adequado dos argumentos é crucial. Arquivos e outros parâmetros geralmente exigem escape para evitar interferência nos comandos do shell. Aqui está um guia completo para escapar efetivamente de argumentos para vários sistemas operacionais e shells, particularmente bash:
Usando aspas
A solução mais simples é colocar argumentos entre aspas. Aspas simples (') evitam a expansão do shell, enquanto aspas duplas (") permitem a substituição de variáveis, mas suprimem a expansão de variáveis dentro da string citada. Essa abordagem é amplamente suportada em diferentes plataformas e shells, incluindo bash:
os.system("cat '%s' | grep something | sort > '%s'"
% (in_filename, out_filename))
Usando o módulo shlex
Python fornece o módulo shlex projetado especificamente para essa finalidade. Sua função quote() escapa corretamente de strings para uso em shells POSIX, incluindo bash:
import shlex
escaped_in_filename = shlex.quote(in_filename)
escaped_out_filename = shlex.quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
escaped_in_filename, escaped_out_filename))
Usando o módulo pipes (aviso de descontinuação!)
Para versões Python 2.xe 3.x até 3.10, pipes.quote do O módulo de tubos obsoleto pode ser usado como uma alternativa ao shlex.quote. Esteja ciente de que a partir do Python 3.11, pipes estão marcados para remoção:
from pipes import quote
escaped_in_filename = quote(in_filename)
escaped_out_filename = quote(out_filename)
os.system("cat {} | grep something | sort > {}".format(
escaped_in_filename, escaped_out_filename))
Como regra geral, por motivos de segurança, a entrada gerada pelo usuário não deve ser conectada diretamente às chamadas do sistema sem validação e higienização adequadas.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3