I have a somewhat similar tool but it doesn't do much besides check for password expiry and do password changes.
It uses pexpect but also multiprocessing and multiprocessing.Queue. I built most of it before we started using Ansible at work, but it is still useful in those places where Ansible is clumsy.
http://ianmiell.github.io/shutit/
it really is 95% of tcl's expect functionality, much easier to debug and understand. I'm grateful it exists, and it's much under-used I think.