如何使用fabric 2运行本地命令?

问题描述 投票:7回答:2

我想使用Fabric并在本地运行命令,而不必建立任何其他连接。

我如何在面料2中做到这一点? ... documentation似乎错过任何一个例子。

python fabric
2个回答
4
投票

在织物2中放弃local命令的设计决定是PITA恕我直言,但我能够通过使用来自Invoke的Context而不是Connection来模拟它。

from fabric import Connection
from invoke.context import Context

@task
def hostname(c):
    c.run('hostname')

@task
def test(c):
    conn = Connection('user@host')
    hostname(conn)
    local_ctx = Context(c.config)  # can be passed into @task;
                                   # Connection is a subclass of Context
    hostname(local_ctx)

1
投票

run,sudo和local都是这样做的:

from fabric import Connection                                                                                  

cn = Connection('[email protected]')    # presumes ssh keys were exchanged                                        

cn.run('ls -al')     # assuming ssh to linux server - as scott                  
cn.sudo('whoami')    # as root                                                  
cn.local('echo ---------- now from local')                                      
cn.local('dir /w')   # assuming client is windows                               
© www.soinside.com 2019 - 2024. All rights reserved.