当我运行我的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的新手。
答案 0 :(得分: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()
答案 1 :(得分:15)
为了让主机在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)
答案 2 :(得分: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
。
答案 3 :(得分:5)
@Nerdatastic是对的,简单来说:不要使用env.hosts,而是使用env.host_string。 e.g。
def setup_db_server
env.host_string = 'db01.yoursite.com' # or the ip address
run("mysqladmin ...")
end
并且运行$ fab setup_db_server
将在目标服务器上执行脚本。
答案 4 :(得分:4)
Nerdatastic是正确的,您需要为fabric指定env.host_string,以了解要使用的主机字符串。我遇到了这个问题,试图使用Task的子类并调用run()方法。它似乎忽略了env.hosts,除了在1.3版本中使用fabric.tasks中的execute。
答案 5 :(得分:0)
我有同样的问题。
我认为这是一个错误。因为今天之前所有工作。 我将我的环境存储在.fabricrc中。
现在我和你的信息相同。不知道为什么。