15

当我运行我的 python 代码时,它要求主机。

未找到主机。请指定(单个)主机字符串进行连接:

我有以下代码:

from fabric.api import *
from fabric.contrib.console import confirm

env.hosts = [ 'ipaddress' ]

def remoteRun():
    print "ENV %s" %(env.hosts)
    out = run('uname -r')
    print "Output %s"%(out)

remoteRun();

我什至尝试使用 -H 选项运行 fab 并且收到相同的消息。我正在使用 Ubuntu 10.10 任何帮助表示赞赏。顺便说一句,我是 Python 的新手。

4

6 回答 6

16

为了让主机在 fab 命令行工具和 fabfile.py 之外的脚本中工作,您必须使用 execute()

from fabric.api import run
from fabric.tasks import execute

def mytask():
    run('uname -a')

results = execute(mytask)
于 2012-08-19T08:09:33.423 回答
15

如果只有一台主机,您可以使用env.host_string = 'somehost or ipaddress'.

;您也不需要remoteRun.

from __future__ import with_statement
from fabric.api import *
from fabric.contrib.console import confirm
from fabric.api import env, run

env.host_string = 'ipaddress'

def remoteRun():
    print "ENV %s" %(env.hosts)
    out = run('uname -r')
    print "Output %s"%(out)

remoteRun()
于 2011-05-25T14:57:17.927 回答
6

我不确定remoteRun();在您的示例中应该做什么。

它是您的 fabfile 的一部分还是您调用脚本的终端命令?

正确的方法是在你的 shell 中使用这样的命令:

fab remoteRun

通常,最好指定您的命令应该运行的具体主机,如下所示:

def localhost():
    env.hosts = [ '127.0.0.1']

def remoteRun():
    print "ENV %s" %(env.hosts)
    out = run('uname -r')
    print "Output %s"%(out)

您可以从终端像这样运行它(假设您在包含您的 fabfile 的目录中):

fab localhost remoteRun

作为替代方案,您可以使用 -H 参数指定主机:

fab -H 127.0.0.1 remoteRun

如果您有要为其调用命令的主机列表,请执行以下操作: http ://readthedocs.org/docs/fabric/latest/usage/execution.html

调整为您的示例:

env.hosts = [ 'localhost', '127.0.0.1']

def remoteRun():
    print "ENV %s" %(env.hosts)
    out = run('uname -r')
    print "Output %s"%(out)

并通过以下方式调用:fab remoteRun

这种方式remoteRun在所有主机上执行env.hosts

于 2011-04-03T16:02:42.587 回答
5

@Nerdatastic 是对的,简单来说:不要使用 env.hosts,而是使用 env.host_string 。例如

def setup_db_server
  env.host_string = 'db01.yoursite.com'   # or the ip address
  run("mysqladmin ...")
end 

并运行$ fab setup_db_server 将在目标服务器上执行脚本。

于 2012-07-08T02:42:08.443 回答
4

Nerdatastic 是对的,您需要为结构指定 env.host_string 变量以了解要使用的主机字符串。我在尝试使用 Task 的子类并调用 run() 方法时遇到了这个问题。它似乎忽略了 env.hosts,除非在 1.3 版中使用从 fabric.tasks 执行。

于 2011-10-19T14:50:35.143 回答
0

我有同样的问题。

我认为这是一个错误。因为今天之前所有的工作。我将环境存储在 .fabricrc 中。

现在我有和你一样的信息。不知道为什么。

于 2011-04-05T23:13:33.840 回答