找不到主机:Fabri

2024-04-19 18:10:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

No hosts found. Please specify (single) host string for connection:

我有以下代码:

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,得到了同样的信息。我正在使用Ubuntu10.10任何帮助都是值得感谢的。顺便说一句,我是个Python新手。


Tags: no代码fromimportenvhostoutfabric
3条回答

如果只有一个主机,则可以使用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()

我不太确定在您的示例中,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调用

这样remoteRunenv.hosts中的所有主机上执行。

为了让主机在fab命令行工具和fabfile.py之外的脚本中工作,you'll have to use execute()

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

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

results = execute(mytask)

相关问题 更多 >