2

我正在运行 Python3 并试图运行 sshls.py 脚本,但总是失败:

AttributeError:“模块”对象没有属性“spawn”

我尝试运行为:

python3 sshls.py

我什至修改了脚本以设置 env 或 python 脚本,但仍然失败:

#!/usr/bin/python3

或者

#!/usr/bin/env python3

我尝试使用 python2.7 仍然得到同样的错误。

脚本内容:

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

2 回答 2

2

好的,最后通过将 pexpect.py 脚本复制到与我的脚本所在的目录相同的目录中。奇怪的是,通过在 IDLE 中独立执行我的代码,它可以工作,但不能通过 python,除非 pexpect.py 与您的脚本位于同一目录中。

于 2013-10-16T16:48:08.397 回答
1

见: http: //pexpect.readthedocs.io/en/stable/overview.html#windows

要求 此版本的 Pexpect 需要 Python 3.3 或更高版本,或 Python 2.7。

从 4.0 版开始,Pexpect 可以在 Windows 和 POSIX 系统上使用。但是,pexpect.spawn 和 pexpect.run() 仅在 POSIX 上可用,其中 pty 模块存在于标准库中。有关详细信息,请参阅Windows 上的 Pexpect 。

于 2018-02-13T09:14:59.100 回答