繁体   English   中英

如何使用Python pexpect模块自动执行Shell交互式命令

[英]How to automate shell interactive commands using Python pexpect module

我正在尝试通过对计算机执行SSH并转到/ var / packages文件夹并执行脚本来自动化应用程序的设置。安装开始时会根据预期的输出发送一组交互式命令。这种pexpect可以实现这一目标,但我无法实现我希望的结果。 我正在尝试遵循代码,当我是python的初学者时,有人可以指导我如何实现此目标。任何帮助将不胜感激。 我的应用程序设置如下所示

[root@bits 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

使用s.before日志进行调试时,您s.before正确的s.before

与您交互的应用似乎比面向屏幕的面向屏幕,而不是面向行的,这可能会带来一些困难,包括颜色和位置的ANSI转义序列。 考虑运行child.expect('Something else')一些字符串, 可靠地显示出来before ,然后做一个简短的sleep()则只是“盲目地”发送“2”或“Y”或什么的,短暂停留之间发送。

你应该改变

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应该在本地主机上运行程序,而不是在远程主机上运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM