使用API时与主机断开连接的Python Fabric问题
网站上说:
关闭连接:Fabric的连接缓存不会自己关闭连接——这件事留给使用它的程序来处理。fab工具会帮你管理这些连接:它会遍历所有打开的连接,并在程序退出前关闭它们(无论任务是否失败)。
使用这个库的人需要确保在程序退出前明确关闭所有打开的连接,不过我们计划在未来让这件事变得更简单。
我到处找,但就是找不到怎么断开或关闭连接。我在循环遍历我的主机并设置env.host_string。这是有效的,但在退出时会卡住。有没有人能帮我关闭连接?再强调一下,我是在使用这个库,而不是fabfile。
4 个回答
0
你可以通过主机名来断开与特定连接的连接,下面是一个代码示例(使用的是fabric 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()
4
fabric的main.py文件里有这么一段:
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是一个字典,里面的值是:paramiko.SSHClient
所以我就去关闭那些连接。
4
如果你不想一个一个地检查所有打开的连接,fabric.network.disconnect_all()
就是你需要的。文档中是这么写的:
"""
与所有当前连接的服务器断开连接。
这个功能通常在fab
的主循环结束时使用,也适合库的用户使用。
"""