Si je me souviens bien, je ne pouvais pas obtenir l'API de tissu pour faire ce que je voulais soit. J'ai décidé d'abandonner la couche supplémentaire entièrement et utiliser Paramiko (la bibliothèque SSH sous-jacente utilisée par tissu) directement:
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()
Bien qu'il existe quelques étapes, cette façon de faire vous permet de tirer parti de la couche SSH directement , par opposition à l'utilisation de subprocess
pour spwan une autre instance de Python ou pour déterminer l'API Fabric. J'ai plusieurs projets, à la fois sur le web et sur console, en utilisant Paramiko de cette manière et je n'ai pas eu trop de problèmes.
Paramiko est extensively documented. J'ai fini par trouver la solution (et c'est vraiment simple!)
Est-ce que cela engendre un sous-processus comme la solution de muksie? La principale raison pour laquelle j'explorais cette question est que les sous-processus supplémentaires sont quelque chose que nous voulons éliminer. –
Si vous modifiez votre affectation sys.argv, cela fonctionnera avec n'importe quel ensemble de commandes. sys.argv [0] est déjà le nom du script, donc: sys.argv = ['fab', '-f'] + sys.argv – mqsoh
Cela fonctionne tant que le fichier porte l'extension '.py'. Je n'ai pas encore trouvé le moyen de le faire fonctionner pour n'importe quelle extension. – Wernight