La forma más sencilla de ejecutar un script Expect desde Python

Estoy intentando dar instrucciones a mi instalación de Python para que ejecute un script Expect “myexpect.sh”:

#!/usr/bin/expect spawn ssh usr@myip expect "password:" send "mypassword\n"; send "./mycommand1\r" send "./mycommand2\r" interact 

Estoy en Windows, por lo que volver a escribir las líneas en el script Expect en Python no es una opción. ¿Alguna sugerencia? ¿Hay algo que pueda ejecutarse de la forma en que “./myexpect.sh” lo hace desde un shell bash?


He tenido algunos éxitos con el comando de subproceso:

 subprocess.call("myexpect.sh", shell=True) 

Recibo el error:

myexpect.sh no es una aplicación Win32 válida.

¿Cómo puedo evitar esto?

Usa la librería pexpect . Esta es la versión de Python para la funcionalidad Expect.

Ejemplo:

 child = pexpect.spawn('Some command that requires password') child.expect('Enter password:') child.sendline('password') child.expect(pexpect.EOF, timeout=None) cmd_show_data = child.before cmd_output = cmd_show_data.split('\r\n') for data in cmd_output: print data 

Pexpect viene con muchos ejemplos para aprender. Para el uso de interact (), echa un vistazo a script.py de ejemplos:

(Para Windows, hay una alternativa a pexpect.)

  • ¿Puedo usar Expect en Windows sin instalar Cygwin?

Ya que es un script .expect, creo que debería cambiar el nombre extendido de su script.

En lugar de usar

 subprocess.call("myexpect.sh", shell=True) 

Deberías usar

 subprocess.call("myexpect.expect", shell=True)