No domínio da programação Python, muitas vezes surge a necessidade de executar comandos ou processos externos a partir de scripts Python. O módulo subprocesso fornece um mecanismo poderoso para essa finalidade, permitindo que programas Python interajam com o sistema operacional e executem comandos de maneira controlada.
Um desafio comum enfrentado ao usar subprocesso é o potencial para o comando executado gerar saída indesejada, que pode sobrecarregar o terminal ou a exibição de saída e interferir na legibilidade da própria saída do script. Isso é particularmente comum ao usar comandos que fornecem mensagens de diagnóstico ou atualizações de status detalhadas.
Se você estiver usando Python versão 3.3 ou posterior, silenciar a saída do subprocesso se torna um problema. tarefa simples graças à introdução da constante DEVNULL. Esta constante representa um objeto semelhante a um arquivo que descarta quaisquer dados gravados nele, redirecionando efetivamente a saída para lugar nenhum.
Para utilizar DEVNULL e suprimir a saída do subprocesso, simplesmente redirecione os fluxos stdout e stderr para ele:
import subprocess retcode = subprocess.call(['echo', 'foo'], stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)
Essa abordagem garante que tanto a saída padrão quanto os fluxos de erro padrão do subprocesso sejam direcionados para o dispositivo DEVNULL, evitando que mensagens indesejadas cheguem ao terminal.
Para versões do Python anteriores à 3.3, incluindo o amplamente usado Python 2.7, silenciar a saída do subprocesso requer uma abordagem um pouco diferente. Python 2.7 não possui a constante DEVNULL, então devemos abrir manualmente o arquivo /dev/null e redirecionar a saída para ele.
Veja como você pode conseguir isso em Python 2.7:
import os import subprocess FNULL = open(os.devnull, 'w') retcode = subprocess.call(['echo', 'foo'], stdout=FNULL, stderr=subprocess.STDOUT)
Ao abrir o arquivo /dev/null (representando o dispositivo nulo, que descarta quaisquer dados gravados nele) e passá-lo como os argumentos stdout e stderr para subprocess.call(), redirecionamos efetivamente toda a saída do subprocesso para o vazio, garantindo um terminal limpo e organizado.
Para completar, vale a pena mencionar uma abordagem alternativa que envolve o redirecionamento da saída usando um comando shell. Embora esse método seja menos portável e geralmente não recomendado para uso em scripts Python, ele pode ser útil em determinados cenários:
retcode = os.system("echo 'foo' > /dev/null")
Essa abordagem executa diretamente um comando shell, redirecionando a saída do comando echo para /dev/null usando o operador >.
Independentemente da abordagem escolhida, o objetivo comum é suprimir a saída desnecessária do subprocesso e manter uma exibição de saída limpa e legível. Ao utilizar essas técnicas, você pode ocultar efetivamente a saída do subprocesso e garantir que apenas as informações desejadas sejam apresentadas ao usuário.
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