假设我有两个带相关参数的命令:
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
谢谢!
答案 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
并且不会要求您输入密码。