[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

Re: pexpect and logging integration

Jean-Michel Pichavant

3/10/2010 2:08:00 PM

Lars Stavholm wrote:
> Hi all,
>
> has anyone managed to integrate pexpect and logging?
>
> I.e., I'd like to be able to pick up the dialog,
> commands sent and responses received, in my logging.
> I know about the pexpect logfile, and I can log things
> to stdout or stderr, but I really need to log using the
> python logging library.
>
> Any thoughts appreciated
> /Lars
>
>
I had to implement this.
It's a bit of a hack, but it does the job.

The following code is tested with python 2.5, I remember pexpect behaves
slightly differently in python 2.3.

import logging
import pexpect
import re

# this will be the method called by the pexpect object to log
def _write(*args, **kwargs):
content = args[0]
# let's ignore other params, pexpect only use one arg AFAIK
if content in [' ', '', '\n', '\r', '\r\n']:
return # don't log empty lines
for eol in ['\r\n', '\r', '\n']:
# remove ending EOL, the logger will add it anyway
content = re.sub('\%s$' % eol, '', content)
return logger.info(content) # call the logger info method with the
reworked content


# our flush method
def _doNothing():
pass

# get the logger
logger = logging.getLogger('foo')

# configure the logger
logger.handlers=[]
logger.addHandler(logging.StreamHandler())
logger.handlers[-1].setFormatter(logging.Formatter("%(asctime)s -
%(name)s - %(levelname)s - %(message)s"))
logger.setLevel(logging.INFO)

# give the logger the methods required by pexpect
logger.write = _write
logger.flush = _doNothing

p = pexpect.spawn('echo "hello world !!"', logfile=logger)
p.expect('!!')

.... 2010-03-10 15:01:31,234 - foo - INFO - hello world !!

Hope it helps.

JM