-2

我正在尝试使用 pexpect 库连接交换机瞻博网络以获取一些接口信息,这是我的代码:

import pexpect

child = pexpect.spawn('ssh root@10.171.23.246')
child.expect('login as: ')
child.sendline('root')
child.expect('password:')
child.sendline(mypassword)
child.expect('% ')
child.sendline('cli')
child.expect('> ')
child.sendline('show interface')

这是结果:

Traceback (most recent call last):

  File "first_test.py", line 4, in <module>

    child.expect('login as: ')

  File "/usr/lib/python2.7/site-packages/pexpect.py", line 1311, in 
expect

    return self.expect_list(compiled_pattern_list, timeout, 
searchwindowsize)

  File "/usr/lib/python2.7/site-packages/pexpect.py", line 1325, in 
expect_list

    return self.expect_loop(searcher_re(pattern_list), timeout, 
searchwindowsize)

  File "/usr/lib/python2.7/site-packages/pexpect.py", line 1409, in 
expect_loop

    raise TIMEOUT (str(e) + '\n' + str(self))

pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().

<pexpect.spawn object at 0x7fb21cfd5a50>

version: 2.3 ($Revision: 399 $)

command: /usr/bin/ssh

args: ['/usr/bin/ssh', 'root@10.171.23.246']

searcher: searcher_re:

    0: re.compile("login as: ")

buffer (last 100 chars): root@10.171.23.246's password:

before (last 100 chars): root@10.171.23.246's password:

after: <class 'pexpect.TIMEOUT'>

match: None

match_index: None

exitstatus: None

flag_eof: False

pid: 20230

child_fd: 3

closed: False

看起来,密码没有发送到交换机。如果不清楚,我是一个新的 python 用户对不起。如何正确连接到交换机?

4

2 回答 2

0

经过几次测试,我找到了答案,问题是第一个没有预料到的“child.expect('login as: ')”。

然后我放一个期望结束以等待我的命令的结果(显示界面),并打印 child.before 以显示我最后一个 sendline() 的输出

import pexpect

child = pexpect.spawn('ssh root@10.171.23.246')
child.expect('login as: ')
child.sendline('root')
child.expect('password:')
child.sendline(mypassword)
child.expect('% ')
child.sendline('cli')
child.expect('> ')
child.sendline('show interface')
child.expect(' > ')
print child.before

有用 !

于 2017-08-18T13:30:23.483 回答
0

试试面料——它比面料更高级,pexpect而且绝对更容易使用。

Fabric 是一个 Python (2.5-2.7) 库和命令行工具,用于简化 SSH 在应用程序部署或系统管理任务中的使用。

基于您的代码的简单示例是:

from fabric.api import env, run
env.host_string = '10.171.23.246'
env.user = 'root'
env.password = 'put_your_password_here'

run('cli')
于 2017-08-10T10:24:00.193 回答