使用Fabric的Python代码不使用远程主机

时间:2018-03-16 17:49:05

标签: python fabric

我正在使用带有Fabric3 1.13.1的python 3.6。以下是我正在使用的代码的简化版本。

from fabric.api import *
from file import func 

env.hosts = ['user@myserver:22' ]
env.passwords={'user@myserver:22':'password'}

def test():

    func() # function defined in func 

此代码保存在名为fabfile.py的文件中。当我在终端中运行fab test时,执行开始为

  

['user @ myserver:22']执行任务'test'

但根据htop,正在使用 localhost 的资源而不是 myserver 。并且 myserver 没有启动任何进程。

如果找不到 myserver ,Fabric是否会以静默方式恢复为localhost?

修改的 我也试过

execute(func(), hosts = ['myserver'])

在一个单独的python文件中,以及在fabfile中,这两种方式都优于 localhost

编辑2
似乎在远程主机上运行的唯一事情是 run("commands_to_run")#这将从列表env.hosts

中选择主机

2 个答案:

答案 0 :(得分:1)

您需要调用run()来执行远程主机上的shell命令。

http://docs.fabfile.org/en/1.14/api/core/operations.html#fabric.operations.run

例如:

def test():
    local("hostname")
    run("hostname")

    another_function()

这将在本地计算机和远程主机上运行hostname shell命令。

Fabric不支持在远程主机上执行任意Python函数。 another_function()将始终在本地计算机上运行。

答案 1 :(得分:1)

根据您的Edit1,您没有正确使用execute

执行中的第一个参数应该是调用run。不同之处在于主机将从第二个参数而不是env.hosts中获取。

def func():
    run( "commands_to_run" )


execute(func, hosts = ['myserver'])