未找到主机: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 新手。
when I run my python code it is asking for host.
No hosts found. Please specify (single) host string for connection:
I have the following code:
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();
I even tried running fab with -H option and I am getting the same message. I'm using Ubuntu 10.10 any help is appreciated. Btw I am a newbie in Python.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
为了让主机在 fab 命令行工具和 fabfile.py 之外的脚本中工作,你必须使用execute():
In order to get hosts to work in a script outside of the fab command-line tool and fabfile.py, you'll have to use execute():
如果只有一台主机,可以使用
env.host_string = 'somehost or ipaddress'
。您也不需要
remoteRun
末尾的;
。If it's only one host, you can use
env.host_string = 'somehost or ipaddress'
.You also don’t need the
;
at the end of yourremoteRun
.我不太确定
remoteRun();
在您的示例中应该做什么。它是您的 fabfile 的一部分还是您调用脚本的终端命令?
正确的方法是在 shell 中使用如下命令:
fab remoteRun
一般来说,最好指定您的命令应该运行的具体主机,如下所示:
您可以从终端运行它(假设您位于包含 fabfile 的目录中):
作为替代方案,您可以使用 -H 参数指定主机:
如果您有要为其调用命令的主机列表,请执行以下操作:
http://readthedocs.org/docs/fabric/latest/usage/execution.html
根据您的示例进行调整:
并通过以下方式调用:
fab remoteRun
这样,
remoteRun
将在env.hosts
中的所有主机上执行。I am not exactly sure what
remoteRun();
is supposed to do in your example.Is it part of your fabfile or is this your terminal command to invoke the script?
The correct way would be a command like this in your shell:
fab remoteRun
Generally it's better to specify the concrete hosts your command is supposed to run on like this:
You can run it like this from a terminal (assuming you are in the directory that contains your fabfile):
As an alternative you could specify the host with the -H parameter:
If you have a list of hosts you want to invoke the command for, do it like this:
http://readthedocs.org/docs/fabric/latest/usage/execution.html
Adjusted to your example:
And called via:
fab remoteRun
This way the
remoteRun
is performed on all hosts inenv.hosts
.@Nerdatastic 是对的,简单来说:不要使用 env.hosts,而是使用 env.host_string。例如
,运行
$ fab setup_db_server
将在目标服务器上执行脚本。@Nerdatastic is right, for simple: don't use env.hosts, use env.host_string instead. e.g.
and running
$ fab setup_db_server
will execute the script on the target server.Nerdatastic 是对的,您需要为 Fabric 指定 env.host_string 变量才能知道要使用什么主机字符串。我在尝试使用 Task 的子类并调用 run() 方法时遇到了这个问题。它似乎忽略了 env.hosts,除非在版本 1.3 中使用 Fabric.tasks 执行。
Nerdatastic is right, you need to specify the env.host_string varaible for fabric to know what host string to use. I came across this problem trying to use a subclass of Task and call the run() method. It seemed to ignore env.hosts except when using execute from fabric.tasks in version 1.3.
我有同样的问题。
我认为这是一个错误。因为今天之前所有的工作。
我将我的环境存储在 .fabricrc 中。
现在我有和你一样的消息。不知道为什么。
i have same issue.
I think this is a bug. Because all work before today.
I store my env in .fabricrc.
Now i have same message as yours. Don't know why.