Why captured match is displayed as part of pexpect ".after" ?

Viet Nguyen vhnguyenn at yahoo.com
Sun Sep 14 01:44:16 EDT 2014


Hi,

If any is familiar with pexpect, please help to point out why my script seems to fail to capture the desired text.

Here, I want to log into a server 172.27.161.19.  Once I see "Username: ", I will type in my userid "admin".

The problem here is I have a list of keywords for pexpect to match before returning the matched item for me.  The list consists of following list items:

expects = ['yes', '.*Username: ', '.*login: |.*Login: ', 'SY-FAR-1>', 'SY-FAR-1#', 'Password: |password: ', '.*Press RETURN to get started']

Here, it seems my script found "Username: " but it got displayed as PART OF _pexpect_session.after  (and this is what I don't understand).  The ".before" or ".after" data should consist of match before and after the desired keyword only.  

============= Manual Execution =======================
telnet 172.27.161.19 
Trying 172.27.161.19...
Connected to 172.27.161.19.
Escape character is '^]'.


User Access Verification

Username: admin
Password: 

SY-FAR-1>en
SY-FAR-1#
=============== Python Script Snippet =======================
	
        expects = ['yes', '.*Username: ', '.*login: |.*Login: ', 'SY-FAR-1>', 'SY-FAR-1#', 'Password: |password: ', '.*Press RETURN to get started']

        i = -1   # reset its value
	print "*step 1*before match, i = %s" % i


	self._pexpect_session.timeout = 80
        cmd = "admin"
        self._log("Executing CLI: '{0}'".format(cmd))
        self._pexpect_session.sendline(cmd)
	
	
        i = self._pexpect_session.expect(expects)
	print "*step 2* found index i = %s" % i 

 	print "*step 3* after match, exec_cmd expects (%s) =" % i, expects
        print "*step 4* exec_cmd match before: '%s'" % self._pexpect_session.before
        print "*step 5* exec_cmd match after: '%s'" % self._pexpect_session.after 
	
=============== Actual Script Output ======================

*step1* before match, i = -1
Executing CLI: 'admin'
*step2* found index i = 1
*step3* after match, exec_cmd expects (1) = ['yes', '.*Username: ', '.*login: |.*Login: ', 'SY-FAR-1>', 'SY-FAR-1#', 'Password: |password: ', '.*Press RETURN to get started']

*step4* exec_cmd match before: ''
*step5* exec_cmd match after: '
Username: '

Appreciate any input or explanation.

Thanks,
Viet



More information about the Python-list mailing list