2017-08-30 94 views
1

我试图通过执行SSH到机器和goto/var/packages文件夹并执行脚本来自动设置应用程序。安装启动一组交互式命令根据预期的输出发送。我从谷歌发现,pexpect可以实现这一点,但我无法实现我希望的结果。我想下面的代码,有人可以指导我如何实现这一点,因为我是初学者python.Any帮助将不胜感激。我的应用程序的设置是这样的如何使用Python pexpect模块自动化shell交互命令

[[email protected] packages]# ./SHR_setup.bin -i console 
    Preparing to install... 
    Extracting the JRE from the installer archive... 
    Unpacking the JRE... 
    Extracting the installation resources from the installer archive... 
    Configuring the installer for this system's environment... 

    Launching installer... 

    =============================================================================== 
    Choose Locale... 
    ---------------- 

     1- Deutsch 
     ->2- English 
     3- Español 
     4- Français 
     5- Italiano 
     6- Nederlands 
     7- Português (Brasil) 

    CHOOSE LOCALE BY NUMBER: 2 
    I accept the terms of the License Agreement (Y/N): Y 
    Please hit Enter to continue: 

Python代码

from pexpect import pxssh 
import pexpect 

    try: 
     s = pxssh.pxssh() 
     hostname = '10.110.40.20' 
     username = 'admin' 
     password = 'admin123' 
     s.login(hostname, username, password) 
     s.sendline('cd /var/packages') # goto /var/packages folder 
     child = pexpect.spawn('./SHR_setup.bin -i console') # start the application setup in packages folder 
     child.expect('CHOOSE LOCALE BY NUMBER') # expect output like this 
     child.sendline('2') 
     s.prompt() 
     print s.before 
    except pxssh.ExceptionPxssh, e: 
     print 'pxssh failed on login' 
     print e 

回答

0

你应该改变

s.sendline('cd /var/packages') 
child = pexpect.spawn('./SHR_setup.bin -i console') 

s.sendline('cd /var/packages') 
s.sendline('./SHR_setup.bin -i console') 

spawn应该不是远程主机上的本地主机上运行的程序。

0

你是在正确的轨道上使用s.before日志进行调试。

您与之交互的应用程序看起来更像面向屏幕的行,这可能会造成一些困难,包括颜色和位置的ANSI转义序列。考虑运行child.expect('Something else'),一些字符串,其中确实可靠地显示在before,然后做一个简短的sleep(),然后只是“盲目地”发送“2”或“Y”或其他任何,暂停发送之间暂停。

+0

@J H谢谢你的回答,我会试试看。当使用'pexpect.spawn('/ var/packages/SHR_setup.bin -i console')'时,出现以下错误。 'pexpect.ExceptionPexpect:该命令未找到或不可执行:/var/packages/SHR_setup.bin -i console'。你能帮我解决我在做什么错误吗? – Madhu

相关问题