未找到主机:Fabric

15 投票
6 回答
15560 浏览
提问于 2025-04-16 14:59

当我运行我的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的新手。

6 个回答

15

如果你只有一个主机,可以用 env.host_string = '某个主机名或IP地址' 来设置。

另外,你在 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()
16

为了让主机在一个不使用fab命令行工具和fabfile.py的脚本中正常工作,你需要使用execute()这个函数:

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

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

results = execute(mytask)
6

我不太确定你提到的 remoteRun(); 在你的例子中具体是干什么的。

这是你 fabfile 的一部分,还是你在终端中用来调用脚本的命令呢?

正确的方式是在你的命令行中输入类似这样的命令:

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 中的所有主机上执行。

撰写回答