Obtenir une sortie en temps réel à l'aide d'un sous-processus
Subprocess est un module puissant en Python utilisé pour exécuter d'autres programmes et interagir avec leurs entrées et sorties. Cependant, les utilisateurs peuvent rencontrer un scénario dans lequel ils doivent récupérer la sortie du programme exécuté en temps réel, sans aucune mise en mémoire tampon.
Description du problème
Le problème survient lors de l'utilisation subprocess.Popen avec stdout défini comme un tube. La sortie du programme encapsulé semble être mise en mémoire tampon, ce qui entraîne des morceaux de données plutôt qu'une livraison ligne par ligne. Définir le paramètre bufsize sur 1 ou 0 ne résout pas le problème.
Solution : lecture itérative à partir de readline()
Malgré le comportement du sous-processus susmentionné, l'extrait de code suivant récupère efficacement la sortie en temps réel :
while True: line = p.stdout.readline() if not line: break ...
L'utilisation de readline() au lieu d'itérer sur p.stdout contourne directement le problème de mise en mémoire tampon et permet une récupération de sortie en temps réel.
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!