[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

Lars Stavholm

3/11/2010 8:44:00 AM

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
>
>