pexpect - can't run example, kept getting AttributeError: 'module' object has no attribute 'spawn'
Solution 1
Ok, finally got it working by copying the pexpect.py script into the same directory as where my scripts are. Weird thing was that by executing my code stand-alone in IDLE it works but not via python unless the pexpect.py is in same directory as your script.
Solution 2
see: http://pexpect.readthedocs.io/en/stable/overview.html#windows
Requirements This version of Pexpect requires Python 3.3 or above, or Python 2.7.
As of version 4.0, Pexpect can be used on Windows and POSIX systems. However, pexpect.spawn and pexpect.run() are only available on POSIX, where the pty module is present in the standard library. See Pexpect on Windows for more information.
Related videos on Youtube
user2766739
Updated on June 04, 2022Comments
-
user2766739 almost 2 years
I am running Python3 and been trying to run sshls.py script but always fail with:
AttributeError: 'module' object has no attribute 'spawn"
I tried running as:
python3 sshls.py
I even modified the script to set either env or python script but still fails:
#!/usr/bin/python3
OR
#!/usr/bin/env python3
I tried with python2.7 and still get same error.
Content of script:
from __future__ import print_function from __future__ import absolute_import import pexpect import getpass, os, traceback def ssh_command (user, host, password, command): ssh_newkey = 'Are you sure you want to continue connecting' child = pexpect.spawn('ssh -l %s %s %s'%(user, host, command)) i = child.expect([pexpect.TIMEOUT, ssh_newkey, 'password: ']) if i == 0: # Timeout print('ERROR!') print('SSH could not login. Here is what SSH said:') print(child.before, child.after) return None if i == 1: # SSH does not have the public key. Just accept it. child.sendline ('yes') child.expect ('password: ') i = child.expect([pexpect.TIMEOUT, 'password: ']) if i == 0: # Timeout print('ERROR!') print('SSH could not login. Here is what SSH said:') print(child.before, child.after) return None child.sendline(password) return child def main (): host = "www.example.com" user = "root" password = "password" child = ssh_command (user, host, password, '/bin/ls -l') child.expect(pexpect.EOF) print(child.before) if __name__ == '__main__': try: main() except Exception as e: print(str(e)) traceback.print_exc() os._exit(1)
-
user2766739 over 10 yearsThanks Robert Harvey for modifying my code formatting, I was just able to save the changes too but says someone already helped me updated it.
-