Un programme imprime en continu sur la sortie standard une ligne à la fois. J'essaie de lire et de traiter une ligne à la fois de cette entrée sans avoir à attendre que le programme se termine. Par exemple, writeOutput.py ci-dessous écrit une ligne à la fois sur stdout (en attente entre chaque ligne entre 1 et 3 secondes).Lecture stdin asynchrone en Python
L'appel ./writeOutput.py | ./processEachLine.py
nécessite writeOutput.py pour terminer avant que processEachLine.py puisse commencer à traiter la première ligne.
Y a-t-il un moyen d'y parvenir en python? Même en appelant writeOutput.py directement dans le programme python au lieu d'utiliser un tube?
Toute aide serait grandement appréciée.
writeOutput.py
#!/usr/bin/env python
import random
import time
i = 0
while i < 5:
n = int(1 + (random.random()*10) % 3)
i += 1
time.sleep(n)
print(str(n) + " test")
processEachLine.py
#!/usr/bin/env python
import sys
while 1:
line = sys.stdin.readline()
if not line:
break
print(">>" + line)
Merci. #!/Usr/bin/env python -u créerait une erreur: "/ usr/bin/env: python -u: Aucun fichier ou répertoire" Une solution de contournement consiste à utiliser python -u writeOutput.py | python -u processEachLine.py Ou ajoutez #!/usr/bin/python -u Merci beaucoup pour l'aide. – tartifletteblvd
C'est étrange, ça marche bien pour moi (essayé sur OS X et Linux). Quel système d'exploitation êtes-vous? – uselpa
Ceci est probablement necro, mais le tiret est probablement mauvais - réussi à recréer l'erreur en copiant le tiret du commentaire de tartifletteblvd – Nitz