Simplest way to run an Expect script from Python
expect, python, ssh, subprocess
Solution
Use the pexpect library. This is the Python version for Expect functionality.
Example:
child = pexpect.spawn('Some command that requires password')
child.expect('Enter password:')
child.sendline('password')
child.expect(pexpect.EOF, timeout=None)
cmd_show_data = child.before
cmd_output = cmd_show_data.split('\r\n')
for data in cmd_output:
print data
Pexpect comes with lots of examples to learn from. For use of interact(), check out `script.py` from examples:
- https://github.com/pexpect/pexpect/tree/master/examples
(For Windows, there is an alternative to pexpect.)
- Can I use Expect on Windows without installing Cygwin?
Problem
I'm trying to instruct my Python installation to execute an Expect script "myexpect.sh": ``` #!/usr/bin/expect spawn ssh usr@myip expect "password:" send "mypassword\n"; send "./mycommand1\r" send "./mycommand2\r" interact ``` I'm on Windows so re-writing the lines in the Expect script into Python are not an option. Any suggestions? Is there anything that can run it the way "./myexpect.sh" does from a bash shell? I have had some success with the subprocess command: ``` subprocess.call("myexpect.sh", shell=True) ``` I receive the error: myexpect.sh is not a valid Win32 application. How do I get around this?