Se ricordo bene, non ho potuto ottenere l'API del tessuto per fare quello che volevo neanche. Ho deciso di abbandonare l'ulteriore livello del tutto e utilizzare Paramiko (la libreria SSH sottostante utilizzato per Tessuto) direttamente:
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()
Mentre ci sono un paio di passi coinvolti, facendo in questo modo consente di sfruttare direttamente lo strato di SSH , invece di usare subprocess
per spanare un'altra istanza Python, o capire l'API Fabric. Ho diversi progetti, sia web che console, che usano Paramiko in questo modo e non ho avuto troppi problemi.
Paramiko è extensively documented.
Questo genera un sottoprocesso come la soluzione di muksie? Il motivo principale per cui ho esplorato questo problema è che i sottoprocessi extra sono qualcosa che vogliamo eliminare. –
Se modifichi il tuo compito sys.argv, funzionerà con qualsiasi gruppo di comandi. sys.argv [0] è già il nome dello script, quindi: sys.argv = ['fab', '-f'] + sys.argv – mqsoh
Funziona fintanto che il file ha estensione '.py'. Non ho ancora trovato il modo di farlo funzionare per qualsiasi estensione. – Wernight