代码之家  ›  专栏  ›  技术社区  ›  Auto-learner

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

  •  1
  • Auto-learner  · 技术社区  · 7 年前

    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:
    

    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
    
    2 回复  |  直到 7 年前
        1
  •  0
  •   pynexj    7 年前

    你应该改变

    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 应该在 地方的 主机,不在

        2
  •  0
  •   J_H    7 年前

    使用 s.before

    你正在使用的应用程序似乎更倾向于屏幕而不是线条,这可能会带来一些困难,包括颜色和位置的ANSI转义序列。考虑跑步 child.expect('Something else') 可靠地显示在 before ,然后做一个简短的介绍 sleep()