Exibição contínua de saída durante a execução do processo
Em scripts Python, geralmente utilizamos subprocessos para executar programas externos. Embora esse seja um recurso poderoso, pode ser frustrante esperar a conclusão de um processo antes de recuperar sua saída. Para resolver isso, vamos explorar um método para transmitir continuamente a saída do processo enquanto ele está em execução.
Tradicionalmente, usamos subprocess.communicate() para capturar toda a saída de um processo quando ele for concluído. No entanto, esta abordagem requer que o processo seja totalmente concluído antes que qualquer saída possa ser exibida.
Para habilitar a saída contínua, podemos aproveitar a função iter em conjunto com fd.readline(). Isso nos permite iterar sobre o fluxo padrão do processo, capturando linhas à medida que ficam disponíveis:
import subprocess
def execute(cmd):
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
for stdout_line in iter(popen.stdout.readline, ""):
yield stdout_line
popen.stdout.close()
return_code = popen.wait()
if return_code:
raise subprocess.CalledProcessError(return_code, cmd)
Nesta versão aprimorada, produzimos cada linha de stdout à medida que ela se torna disponível. Isso permite que o script exiba a saída continuamente conforme ela é gerada pelo processo.
Aqui está um exemplo ilustrativo:
for path in execute(["locate", "a"]):
print(path, end="")
Usando esta abordagem, podemos exibir continuamente os caminhos que correspondem à consulta de pesquisa "a" à medida que são encontrados pelo comando "locate", fornecendo feedback em tempo real sobre o andamento do processo.
Essa técnica permite o monitoramento contínuo da saída, melhorando a interatividade e a experiência do usuário de scripts que iniciam processos externos.
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