2017-08-30 3 views
1

J'essaie d'automatiser la configuration d'une application en exécutant SSH sur la machine et le dossier goto/var/packages et en exécutant le script.lorsque l'installation démarre un ensemble de commandes interactives être envoyé en fonction de la sortie attendue.J'ai trouvé à partir de google que pexpect peut y parvenir, mais je suis incapable d'atteindre le résultat que je souhaite. J'essaie de suivre le code, quelqu'un peut-il me guider comment y parvenir comme je suis débutant à python.Toute aide serait appréciée. Ma configuration de l'application se présente comme suitComment automatiser les commandes interactives du shell à l'aide du module python python

[[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 code

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 

Répondre

0

Vous devez changer

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 est censé exécuter un programme sur l'hôte local , pas sur la hôte à distance.

0

Vous êtes sur la bonne voie avec l'aide du journal pour le débogage s.before. L'application avec laquelle vous interagissez semble être plus orientée vers l'écran que vers la ligne, ce qui peut poser quelques difficultés, y compris des séquences d'échappement ANSI pour la couleur et la position. Envisagez d'exécuter child.expect('Something else'), une chaîne apparaît , puis faites un bref sleep(), puis envoyez "aveuglément" "2" ou "y" ou autre, en faisant une brève pause entre les envois.

+0

@J H merci pour votre réponse, je vais l'essayer. J'obtiens l'erreur suivante quand 'pexpect.spawn ('/ var/packages/SHR_setup.bin -i console')' est utilisé. 'pexpect.ExceptionPexpect: La commande n'a pas été trouvée ou n'était pas exécutable: /var/packages/SHR_setup.bin -i console'. Pouvez-vous m'aider s'il vous plaît quelle erreur je fais? – Madhu