python deployment command-prompt fabric pexpect

python - ¿Cómo hacer que Fabric interactúe automáticamente(en lugar de interactuar con el usuario) con los comandos de shell? Combinar con pexpect?



deployment command-prompt (3)

Como Glenn, yo diría que use pexpect; Adicionalmente,

Eche un vistazo a este contenedor que escribí para crear un script del comportamiento pexpect de la tela:

from ilogue.fexpect import expect, expecting, run prompts = [] prompts += expect(''What is your name?'',''John'') prompts += expect(''Where do you live?'',''New York'') with expecting(prompts): run(''command'')

Vea también mi blogpost en fexpect o cómo manejar las solicitudes en la tela con pexpect

Buscar significa hacer que Fabric interactúe automáticamente (en lugar de interactuar con el usuario) con comandos de shell (y no solo solicitudes de contraseñas, sino también entrada solicitada por el usuario cuando no está disponible una "sustitución estándar / interactiva" como apt-get install -y ).

Esta pregunta junto con estos documentos de Fabric sugieren que Fabric solo puede "empujar la interactividad" al usuario humano que ejecuta el programa Fabric. Buscando en cambio automatizar completamente sin ninguna presencia humana. Aún no tiene un problema "real" actual que resolver, solo preparándose para un posible obstáculo en el futuro.

¿Es posible que se combine con pexpect (o un mecanismo alternativo similar) si Fabric no puede manejar automáticamente todas las indicaciones estándar? Con la esperanza de que no sea necesario ser una clase de "lo uno o lo otro" . ¿Por qué no aprovechar ambos (pexpect y Fabric) cuando sea apropiado, si corresponde, en el mismo programa / automatización?


No es ni / o. Solo necesita ejecutar el comando fab a través de pexpect:

child = pexpect.spawn(''fab <task>'') child.expect(''prompt:'') child.send(''reponse to prompt'') ... etc

El comando fab es como cualquier otro comando, por lo que puede ser ejecutado mediante pexpect.


Para usuarios de Windows, use winpexpect . Asegúrese de usar esta versión que vinculé, ya que esta versión corrige algunos errores en versiones anteriores.

import sys, winpexpect child = winpexpect.winspawn(''ftp'', [''<ftp host>'']) child.logfile = sys.stdout child.expect(''User.*:'') child.sendline(''username'') child.expect(''Password:'') child.direct_sendline(''password'') child .sendline(''ls'') print(''Now enter the FTP interactive mode'') child.interact()