2010-08-02 5 views
5

El sitio web dice:Desconexión de acogida con Python Tela cuando se utiliza el API

conexiones de cierre: caché conexión de Tela nunca cierra las conexiones sí mismo - que deja esto a lo que se usarlo. La herramienta fabulosa hace la contabilidad para usted: itera sobre todas las conexiones abiertas y los cierra justo antes de que salga

usuarios de la biblioteca tendrán que asegurarse de que (independientemente de si las tareas fracasaron o no). cerrar explícitamente todas las conexiones abiertas antes de que salga su programa, aunque planificamos que lo haga más fácil en el futuro .

He buscado en todas partes, pero no puedo encontrar la manera de desconectar o cerrar las conexiones. Estoy recorriendo mis hosts y estableciendo env.host_string. Está funcionando, pero se cuelga al salir. ¿Alguna ayuda sobre cómo cerrar? Solo para reiterar, estoy usando la biblioteca, no un fabfile.

Respuesta

3

Si no desea tener que iterar a través de todas las conexiones abiertas, fabric.network.disconnect_all() es lo que está buscando. La cadena de documentación lee

""" desconexión de todos los servidores conectados actualmente. Se utiliza al final del bucle principal fab 's, y también diseñado para ser utilizado por los usuarios biblioteca. ''"

4

El main.py para la tela tiene esto:

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 es un diccionario con el ser de valor: paramiko.SSHClient

Así que me voy a cerrar los.

+1

Excepto que los documentos API todavía deberían ser correctos. –

+1

Vale la pena señalar aquí para evitar que las personas busquen, la clave es cualquiera que sea su cadena de host. –

+0

por cierto, esto es solo si está usando 0.9.4 o más viejo, la respuesta correcta es la envoltura más dulce alrededor de esto. – dtx

0

puede desconectarse de una conexión específica, por nombre de host, usando el siguiente fragmento de código (con tela 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

¿Cómo funcionará si uno no está usando 'host_string' del entorno? porque cuando imprimo conexión, imprime el host real como '{'ec2-user @ xxxx: 22': }' – Volatil3

Cuestiones relacionadas