Je considère pexpect
(totalement ouvert aux alternatives, s'il y en a d'autres que je ne connais pas) dans l'un de nos wrappers de script de déploiement - mais j'ai besoin d'un moyen de lire la sortie en temps réel, pas seulement une fois que nous avons frappé le EOF
. Comme il s'agit d'un package de déploiement, utilisé pour tous les environnements, nous devons détecter les problèmes dès qu'ils surviennent (et potentiellement atteindre la sortie de secours si c'est vraiment mauvais).Comment puis-je analyser pexpect en temps réel?
Y at-il une telle chose que je peux utiliser? Idéalement, je voudrais utiliser notre enregistreur déjà existant ..
def SetupLogging():
# the logger
# set to DEBUG since the reports should already give
# any information we're looking for at a glance
global log
log = logging.getLogger('ansiwrap')
log.setLevel(logging.DEBUG)
# create file handler which logs everything
fh = logging.FileHandler('ansiwrap.debug', mode='w')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
# create formatter and add it to the handlers
formatter = logging.Formatter('[%(asctime)s] | %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
fh.setFormatter(formatter)
# add the handlers to logger
log.addHandler(ch)
log.addHandler(fh)
Pour être complet, voici un exemple d'implémentation, mais il semble maladroit me:
child = pexpect.spawn(cmd)
while True:
try:
child.expect('\n')
print(child.before)
except pexpect.EOF:
break