Si no recuerdo mal, no pude conseguir la API de tela para hacer lo que quería tampoco. Decidí abandonar la capa extra en su totalidad y utilizar Paramiko (la biblioteca SSH subyacente utilizado por Fabric) directamente:
import os
import paramiko
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname.example.com', 22, 'username', 'password')
ssh.save_host_keys(os.path.expanduser('~/.ssh/known_hosts'))
stdin, stdout, stderr = ssh.exec_command('uname -s')
print stdout.read()
Si bien hay algunos pasos más involucrados, haciendo de esta manera le permite aprovechar la capa SSH directamente , en lugar de utilizar subprocess
para spwan otra instancia de Python, o averiguar la API Fabric. Tengo varios proyectos, tanto web como consola, que usan Paramiko de esta manera y no he tenido demasiados problemas.
Paramiko es extensively documented.
¿Esto genera un subproceso como la solución de muksie? La razón principal por la que estaba explorando este tema es porque los subprocesos adicionales son algo que queremos eliminar. –
Si modificas tu asignación de sys.argv, funcionará con cualquier conjunto de comandos. sys.argv [0] ya es el nombre del script, así que: sys.argv = ['fab', '-f'] + sys.argv – mqsoh
Funciona siempre que el archivo tenga la extensión '.py'. No encontré la manera de hacerlo funcionar para cualquier extensión. – Wernight