在没有命令行工具的情况下使用Python Fabric(fab)

时间:2011-07-19 02:05:05

标签: python fabric

Altough Fabric文档是指在不需要fab命令行工具和/或任务的情况下使用该库进行SSH访问的方法,我似乎无法设法实现这一点。

我想通过执行' python example.py '来运行此文件( example.py ):

env.hosts = [ "example.com" ]
def ps():
    run("ps")
ps()

感谢。

5 个答案:

答案 0 :(得分:16)

我最终这样做了:

from fabric.api import env
from fabric.api import run

class FabricSupport:
    def __init__ (self):
        pass

    def run(self, host, port, command):
        env.host_string = "%s:%s" % (host, port)
        run(command)

myfab = FabricSupport()

myfab.run('example.com', 22, 'uname')

产生:

[example.com:22] run: uname
[example.com:22] out: Linux

答案 1 :(得分:4)

#!/usr/bin/env python
from fabric.api import hosts, run, task
from fabric.tasks import execute

@task
@hosts(['user@host:port'])
def test():
    run('hostname -f')

if __name__ == '__main__':
   execute(test)

更多信息:http://docs.fabfile.org/en/latest/usage/library.html

答案 2 :(得分:4)

以下是使用execute方法

的三种不同方法
from fabric.api import env,run,execute,hosts

# 1 - Set the (global) host_string
env.host_string = "hamiltont@10.0.0.2"
def foo():
  run("ps")
execute(foo)

# 2 - Set host string using execute's host param
execute(foo, hosts=['hamiltont@10.0.0.2'])

# 3 - Annotate the function and call it using execute
@hosts('hamiltont@10.0.0.2')
def bar():
  run("ps -ef")
execute(bar)

要使用密钥文件,您需要设置env.keyenv.key_filename,因为:

env.key_filename = 'path/to/my/id_rsa'
# Now calls with execute will use this keyfile
execute(foo, hosts=['hamiltont@10.0.0.2'])

您还可以提供多个密钥文件,无论哪一个记录您将使用该主机

答案 3 :(得分:3)

找到我的修复程序。我需要提供自己的* env.host_string *,因为更改env.user / env.keyfile / etc不会自动更新此字段。

答案 4 :(得分:1)

这是需要做的事情:

在example.py

from fabric.api import settings, run

def ps():
  with settings(host_string='example.com'):
    run("ps")
ps()

查看使用fabric作为库的文档: http://docs.fabfile.org/en/1.8/usage/env.html#host-string