代码之家  ›  专栏  ›  技术社区  ›  hansaplast

结构:为显式主机调用run()

  •  1
  • hansaplast  · 技术社区  · 14 年前

    from fabric.api import run
    
    for servername in servernames:
        load_str = run('cat /proc/loadavg | cut -d' ' -f1', host=servername)
    

    但是fabric不允许我这样指定主机名,我发现这个方法很难看:

    from fabric.api import env, run
    
    for servername in servernames:
        env.host_string = servername
        load_str = run('cat /proc/loadavg | cut -d' ' -f1')
    

    按照建议,直接使用paramiko here 促使我写一个自己的模块来抽象它-引用fabrics网站,这正是fabric应该为我做的:

    除了通过fab fool使用之外,Fabrics组件还可以导入到其他Python代码中,为SSH协议套件提供比Paramiko(Fabric本身利用的)更高级别的Pythonic接口

    3 回复  |  直到 7 年前
        1
  •  1
  •   Community CDub    7 年前

    这个问题提供了一个解决方案:

    How to set target hosts in Fabric file

        2
  •  1
  •   hansaplast    14 年前

    在看 run() 代码很明显,fabric中没有任何模块可以用于我的目的。

    this one

        3
  •  1
  •   Juan Fco. Roco    10 年前
    from fabric.api import settings
    
    for servername in servernames:
        with settings(host_string=servername):
            load_str = run('cat /proc/loadavg | cut -d' ' -f1')
    

    或者更好地使用execute

    from fabric.tasks import execute
    
    data = execute(load_str , hosts = servernames)
    
    def load_str():
        return run('cat /proc/loadavg | cut -d' ' -f1') 
    

    env.skip_bad_hosts = True