Maison > développement back-end > Tutoriel Python > Pourquoi mon sous-processus Python se bloque-t-il lors de la lecture de la sortie du programme C ?

Pourquoi mon sous-processus Python se bloque-t-il lors de la lecture de la sortie du programme C ?

Susan Sarandon
Libérer: 2024-11-17 19:20:02
original
955 Les gens l'ont consulté

Why Does My Python Subprocess Hang When Reading C Program Output?

Le sous-processus du programme Python C se bloque à ""for line in iter""

Vous essayez de lire la sortie d'un programme C en utilisant subprocess.Popen en Python, mais le processus est bloqué à la ligne "for line in iter(process.stdout.readline, '')". Il s'agit d'un problème connu avec le sous-processus, dû à la mise en mémoire tampon du flux stdout.

Corrigez directement le tampon stdout dans le programme C

Le flux stdout est mis en mémoire tampon par défaut. Cela signifie que le programme C n’enverra aucune sortie au tube tant que le tampon n’est pas plein. Pour résoudre ce problème, vous pouvez utiliser la fonction setvbuf pour définir le flux stdout sur la mise en mémoire tampon de ligne. Cela amènera le programme C à envoyer la sortie au tube immédiatement après l'écriture de chaque ligne.

Ou utilisez un pseudo-TTY

Une autre option consiste à utiliser un pseudo-TTY. TTY (terminal) pour communiquer avec le programme C. Cela permettra au programme C d'envoyer immédiatement la sortie au tube, même si le flux stdout est mis en mémoire tampon.

Ou corrigez-le sans modifier la source du programme C

Enfin, vous pouvez utiliser l'utilitaire stdbuf pour changer le type de mise en mémoire tampon sans modifier le code source du programme C. Cet utilitaire vous permettra de forcer le programme C à envoyer immédiatement la sortie au tube, même si le flux stdout est mis en mémoire tampon.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal