2010-08-02 13 views
5

Il sito dice:Disconnessione da host con Python tessuto quando si utilizza l'API

connessioni di chiusura: la cache connessione del tessuto non chiude mai connessioni sé - lascia questo fino a tutto ciò che è ad usarlo. Lo strumento fab fa contabilità per voi: itera su tutte le connessioni aperte e li chiude poco prima di uscire

utenti della Biblioteca avranno bisogno per garantire che (indipendentemente dal fatto che i compiti fallito o no.) chiude in modo esplicito tutte le connessioni aperte prima che il loro programma venga chiuso, sebbene il nostro piano semplifichi il tutto nel futuro .

Ho cercato ovunque, ma non riesco a scoprire come disconnettere o chiudere le connessioni. Sto collegando i miei host e impostando env.host_string. Funziona, ma si blocca quando si esce. Qualche aiuto su come chiudere? Solo per reiterare, sto usando la libreria, non un file favoloso.

risposta

3

Se non si desidera eseguire iterazioni su tutte le connessioni aperte, fabric.network.disconnect_all() è ciò che si sta cercando. Il docstring legge

""" Disconnetti da tutti i server attualmente connessi. utilizzati alla fine del ciclo principale fab s', e anche essere utilizzato da utenti biblioteca. ''"

4

Il main.py per il tessuto ha questo:

from fabric.state import commands, connections 

for key in connections.keys(): 
    if state.output.status: 
     print "Disconnecting from %s..." %, denormalize(key), connections[key].close() 

fabric.state.connections è un dict con l'essere di valore: paramiko.SSHClient

Così me ne vado a chiudere quelli.

+1

Tranne che i documenti API dovrebbero essere ancora corretti. –

+1

Vale la pena notare qui per salvare le persone dalla ricerca, la chiave è qualunque sia la stringa host. –

+0

a proposito, questo è solo se si utilizza 0.9.4 o precedente, la risposta giusta è solo un involucro dolce attorno a questo. – dtx

0

È possibile disconnettersi da una connessione specifica, dal nome host, utilizzando il seguente frammento di codice (con tessuto 1.10.1):

def disconnect(host): 
    host = host or fabric.api.env.host_string 
    if host and host in fabric.state.connections: 
     fabric.state.connections[host].get_transport().close() 
+0

Come funziona se uno non sta usando 'host_string' dall'ambiente? perché quando stampo la connessione stampa l'host attuale come '{'ec2-user @ xxxx: 22': }' – Volatil3

Problemi correlati