我试图自动化一个系统,我们有一个linux盒子但是自定义..转到shell我们必须传递一些输入。如下所示:
tanuj$ ssh admin@10.10.10.10
Used by Tanuj
Password:
command line interface
app > en
app # config t
app (config) #
我在python中使用pexpect编写了一个脚本。我能够登录并执行命令
pexpect.sendline("ls -lrt")
pexpect.expect("#")
但是当我使用pexpect.before()
时......什么都没有...当命令输出很长时我也可以看到pexpect.before
也得到了命令。
任何想法如何解决这个..或者是否有任何其他python模块,我可以用来自动化ssh会话,就像我在这里。
我也尝试过使用paramiko,但它没有用,因为我们在执行正常的shell提示之前执行了一些命令。
答案 0 :(得分:1)
我也面临类似的问题。我正要问这个问题。您在
中使用了#符号pexpect.expect('#')
此#符号会记录其后写的所有内容。此外我想你应该创建一个子进程来生成一个进程,就像(我不知道我的情况是否正确):
child=pexpect.spawn('ssh admin@10.10.10.10')
child.expect('prompt_expected_by_you') # put in the prompt you expect after sending SSH
child.sendline('your_password')
child.expect('Prompt_expected_by_you')
child.sendline('ls -ltr')
child.expect('Prompt_expected_by_you')
print child.before, # , will keep continue your newline print
print child.after
child.sendline('exit')
child.expect('Prompt_expected_by_you')
child.sendline('exit')
child.expect('Prompt_expected_by_you') # may not be required
child.close # close the child session
我在FTP中成功使用了这些命令,但无法在SSH中打印“LS -LTR”的结果。我想我必须发起一个shell,但不确定。你身边有什么进展吗?