It works like a charm, thank you! /Lars Jean-Michel Pichavant wrote: > 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 > >
-- http://mail.python.org/mailman/listinfo/python-list