Fabric在两个独立服务器上运行两个单独命令的正确方法是什么?

时间:2018-03-13 19:20:54

标签: python fabric

假设我有两个带相关参数的命令:

  • public static class MonoOptionsExtensions { public static List<string> ParseStrict(this OptionSet source, IEnumerable<string> arguments) { var args = arguments.ToArray(); var beforeDoubleDash = args.TakeWhile(x => x != "--"); var unprocessed = source.Parse(beforeDoubleDash); var firstUnprocessedOpt = unprocessed.Find(x => x.Length > 0 && (x[0] == '-' || x[0] == '/')); if (firstUnprocessedOpt != null) throw new OptionException("Unregistered option '" + firstUnprocessedOpt + "' encountered.", firstUnprocessedOpt); return unprocessed.Concat(args.SkipWhile(x => x != "--").Skip(1)).ToList(); } }
  • command1

我想在 ServerA 上运行第一个命令,在 ServerB

上运行第二个命令

通过更改command2

是否是在结构中执行此操作的正确方法

给予或接受,以下是正确的方法吗?我不能拥有包含所有服务器的主机列表,我可以选择告诉env方法执行哪个服务器?

run

谢谢!

1 个答案:

答案 0 :(得分:0)

考虑到结构限制,显然最好的方法是使用execute方法而不是run

from fabric.tasks import execute

def execute_task(command,
                 host):                  
    """
        wrapper around the execute task of fabric. 
        It runs the command remotely via ssh. 
    """    
    return execute(command, host=host)

如果ssh密码相同,它将很有效,因为您可以在环境中设置env.password并且不会要求您输入密码。