PYPI-程序包版本 PYPI-PYTHON版本 PYPI-许可证 圈CI 编解码器

欢迎使用 Fabric !

Fabric是一个高级的Python(2.7、3.4+)库,旨在通过SSH远程执行Shell命令,从而生成有用的Python对象。它建立在 Invoke (子进程命令执行和命令行功能)和 Paramiko (SSH协议实现),扩展它们的API以相互补充并提供附加功能。

要了解此版本的织物有哪些新功能,请参阅 the changelog

项目维护人员保持一个 roadmap 在他的网站上。

该网站涵盖了Fabric的项目信息,如ChangeLog、贡献指南等。详细的用法和API文档可以在我们的代码文档站点上找到, docs.fabfile.org

请参见下面的高级介绍,或查看左侧的导航以了解网站的其余内容。

什么是 Fabric ?

Fabric是一个高级python(2.7,3.4+)库,旨在通过ssh远程执行shell命令,从而产生有用的python对象:

>>> from fabric import Connection
>>> result = Connection('web1.example.com').run('uname -s', hide=True)
>>> msg = "Ran {0.command!r} on {0.connection.host}, got stdout:\n{0.stdout}"
>>> print(msg.format(result))
Ran 'uname -s' on web1.example.com, got stdout:
Linux

它建立在 Invoke (子进程命令执行和命令行功能)和 Paramiko (SSH协议实现),扩展它们的API以相互补充并提供附加功能。

备注

交换矩阵用户可能还会对以下两项感兴趣 strictly optional 实现最佳实践用户级代码的库: Invocations (仅调用、专注于本地的CLI任务)和 Patchwork (远程友好的、通常以Shell命令为中心的实用程序函数)。

它是如何使用的?

Fabric 的核心用例包括(但不限于):

  • 单个主机上的单个命令:

    >>> result = Connection('web1').run('hostname')
    web1
    >>> result
    <Result cmd='hostname' exited=0>
    
  • 跨多个主机的单个命令(通过不同的方法:串行、并行等):

    >>> from fabric import SerialGroup
    >>> result = SerialGroup('web1', 'web2').run('hostname')
    web1
    web2
    >>> # Sorting for consistency...it's a dict!
    >>> sorted(result.items())
    [(<Connection host=web1>, <Result cmd='hostname' exited=0>), ...]
    
  • 针对单个连接的python代码块(函数/方法):

    >>> def disk_free(c):
    ...     uname = c.run('uname -s', hide=True)
    ...     if 'Linux' in uname.stdout:
    ...         command = "df -h / | tail -n1 | awk '{print $5}'"
    ...         return c.run(command, hide=True).stdout.strip()
    ...     err = "No idea how to get disk space on {}!".format(uname)
    ...     raise Exit(err)
    ...
    >>> print(disk_free(Connection('web1')))
    33%
    
  • 多主机上的 Python代码块:

    >>> # NOTE: Same code as above!
    >>> def disk_free(c):
    ...     uname = c.run('uname -s', hide=True)
    ...     if 'Linux' in uname.stdout:
    ...         command = "df -h / | tail -n1 | awk '{print $5}'"
    ...         return c.run(command, hide=True).stdout.strip()
    ...     err = "No idea how to get disk space on {}!".format(uname)
    ...     raise Exit(err)
    ...
    >>> for cxn in SerialGroup('web1', 'web2', 'db1'):
    ...    print("{}: {}".format(cxn, disk_free(cxn)))
    <Connection host=web1>: 33%
    <Connection host=web2>: 17%
    <Connection host=db1>: 2%
    

除了这些面向库的用例之外,Fabric还可以方便地与invoke的命令行任务功能集成,通过 fab 二进制存根:

  • python函数、方法或整个对象可以用作cli可寻址的任务,例如 fab deploy

  • 任务可以指示在执行之前或之后要运行的其他任务(前置或后置任务);

  • 任务通过常规的GNU样式参数进行参数化,例如 fab deploy --env=prod -d

  • 可以在单个CLI会话中提供多个任务,例如 fab build deploy

  • 更重要的是-支持所有其他调用功能-请参阅 its documentation 了解更多细节。

我是Fabric1的用户,如何升级?

我们以允许与Fabric1一起安装的方式包装了现代结构,因此您可以按照您的用例需要的任何速度升级。有多种可能的方法——见 detailed upgrade documentation 有关详细信息。

这是什么网站?

www.fabfile.org 为结构提供项目信息,如变更日志、贡献指南、开发路线图、新闻/博客等。

详细的概念文档和API文档可以在我们的代码文档站点上找到, docs.fabfile.org