Maison >développement back-end >Tutoriel Python >Comment lire et traiter efficacement la sortie du sous-processus ligne par ligne en Python ?

Comment lire et traiter efficacement la sortie du sous-processus ligne par ligne en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-14 16:38:11829parcourir

How to Efficiently Read and Process Subprocess Output Line by Line in Python?

Comment lire la sortie standard du sous-processus ligne par ligne

En Python, utiliser un sous-processus pour appeler un utilitaire Linux qui génère un grand volume de sortie peut poser des défis si vous souhaitez capturer et traiter la sortie de manière incrémentielle.

Dans le processus parent, la ligne for de l'instruction proc.stdout lit l'intégralité de l'entrée avant de la parcourir. Cela peut empêcher la sortie d'apparaître dans votre application jusqu'à ce qu'un montant important ait été généré.

Pour résoudre ce problème, utilisez plutôt proc.stdout.readline() :

import subprocess

proc = subprocess.Popen(['python', 'fake_utility.py'], stdout=subprocess.PIPE)
while True:
  line = proc.stdout.readline()
  if not line:
    break
  #the real code does filtering here
  print "test:", line.rstrip()

Ceci La solution vous permet de filtrer et d'imprimer chaque ligne de sortie dès qu'elle devient disponible à partir du sous-processus. Gardez à l'esprit que vous devrez peut-être toujours prendre en compte le comportement de mise en mémoire tampon du sous-processus.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn