未找到主机:Fabric
当我运行我的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
中的所有主机上执行。