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 paso matrices de números grandes entre los subprocesos de Python sin guardar en el disco?
- ¿Cómo puedo interactuar con una aplicación en mac a través del subproceso python?
- esperar proceso hasta que todos los subprocesos terminen?
- ¿Por qué suministrar stdin a subprocess.Popen hace que lo que se escribe en stdout cambie?
- Terminar subproceso en Windows, acceso denegado
¿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.)
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)