gpt4 book ai didi

python - Fabric - ThreadingGroup 异常会停止剩余的请求吗?

转载 作者:行者123 更新时间:2023-12-03 19:31:46 25 4
gpt4 key购买 nike

我是 Fabric 的新手,想对一些远程 SSH 服务器并行执行一系列命令。

似乎我应该使用 ThreadingGroup 来做到这一点,我可以做到,而且似乎有效。

我唯一真正的问题是我想了解如何处理错误情况,以及如何将服务器列表作为字符串传入,这是我从文件或命令行中获取的。

我怎样才能做到这一点?

最佳答案

我找到了 an example in a github issue ,并将其扩展为适用于我的用例...希望它有所帮助!
测试文件

# requires fabric 2.x - run 'pip install fabric' to install it
import logging, socket, paramiko.ssh_exception
from fabric import Connection, Config, SerialGroup, ThreadingGroup, exceptions, runners
from fabric.exceptions import GroupException

# Note: You need to supply your own valid servers here to ssh to of course!
def main():
testHosts("All should succeed", "validServer1,validServer2,validServer3")
testHosts("Some should fail", "validServer1,validServer2,BADSERVER1,validServer3,BADSERVER2")

def testHosts(message, hostsAsString):
print("")
print(message)

# Get list of hosts from somewhere, and convert them to connections
hosts = hostsAsString.split(",")
servers = [Connection(host=host) for host in hosts]

# Create a thread group to run requests in parallel
g = ThreadingGroup.from_connections(servers)
try:
command = "df -h / | tail -n1 | awk '{print $5}'"
results = g.run(command, hide=True)
for r in results:
connection = results[r]
print("{}".format(r.host) )
print(" SUCCESS, " + connection.stdout.strip())
except GroupException as e:
# If an exception occurred, at least one request failed.
# Iterate through results here
for c, r in e.result.items():
print("{}".format(c.host) )
if isinstance(r,runners.Result) :
print(" SUCCESS, " + r.stdout.strip())
elif isinstance(r,socket.gaierror) :
print(" FAILED, Network error")
elif isinstance(r,paramiko.ssh_exception.AuthenticationException) :
print(" FAILED, Auth failed")
else:
print(" FAILED, Something other reason")

main()
产生以下输出
$ python test.py

All should succeed
validServer1
SUCCESS, 59%
validServer2
SUCCESS, 54%
validServer3
SUCCESS, 53%

Some should fail
validServer1
SUCCESS, 59%
validServer2
SUCCESS, 54%
validServer3
SUCCESS, 53%
BADSERVER1
FAILED, Network error
BADSERVER2
FAILED, Network error

关于python - Fabric - ThreadingGroup 异常会停止剩余的请求吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53763785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com