如何从fabric2组获取正在处理的主机

2024-06-13 22:30:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想尝试fabric2来完成一些需要在多个主机上运行多个命令的任务。所以我使用了threadingGroup,因为我想同时执行它。下面是代码

 with fabric.ThreadingGroup(*hosts) as tg:    
    try:                                     
        tg.run('uptime')
        tg.run('last -xF| grep boot')

现在我需要知道fabric一次处理哪个主机,因为我需要根据第二个run命令的结果对主机进行一些处理。我试着在这件事上翻了很多眼,但没找到多少。即使是fabric文档也很少有关于组的一般信息。在

如果我愿意牺牲下面这样的并发性,我就可以实现这一点。在

^{pr2}$

但是这种方法破坏了使用threadingGroup的整个方法,因为它不是并行运行的,而是按顺序执行的。在

那么,有没有办法用fabric2实现这个目标呢,还是我应该只使用fabric1呢。在


Tags: 方法run代码命令aswithtgfabric
1条回答
网友
1楼 · 发布于 2024-06-13 22:30:41

来自run操作的GroupResult将告诉您每个主机上命令的输出。在

例如:


with fabric.ThreadingGroup(*hosts) as tg:    
    try:                                     
        tg.run('uptime')
        results = tg.run('last -xF| grep boot')
        for connection, result in results.items():
            if connection.host == 'host1':
                # do some stuff here

相关问题 更多 >