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!