未找到主机:Fabric

发布于 2024-10-29 22:46:47 字数 441 浏览 1 评论 0原文

当我运行 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

長街聽風 2024-11-05 22:46:47

为了让主机在 fab 命令行工具和 fabfile.py 之外的脚本中工作,你必须使用execute()

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

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

results = execute(mytask)

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():

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

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

results = execute(mytask)
故事未完 2024-11-05 22:46:47

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

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 your 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()
半仙 2024-11-05 22:46:47

我不太确定 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 中的所有主机上执行。

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:

def localhost():
    env.hosts = [ '127.0.0.1']

def remoteRun():
    print "ENV %s" %(env.hosts)
    out = run('uname -r')
    print "Output %s"%(out)

You can run it like this from a terminal (assuming you are in the directory that contains your fabfile):

fab localhost remoteRun

As an alternative you could specify the host with the -H parameter:

fab -H 127.0.0.1 remoteRun

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:

env.hosts = [ 'localhost', '127.0.0.1']

def remoteRun():
    print "ENV %s" %(env.hosts)
    out = run('uname -r')
    print "Output %s"%(out)

And called via: fab remoteRun

This way the remoteRun is performed on all hosts in env.hosts.

雨后咖啡店 2024-11-05 22:46:47

@Nerdatastic 是对的,简单来说:不要使用 env.hosts,而是使用 env.host_string。例如

def setup_db_server
  env.host_string = 'db01.yoursite.com'   # or the ip address
  run("mysqladmin ...")
end 

,运行 $ fab setup_db_server 将在目标服务器上执行脚本。

@Nerdatastic is right, for simple: don't use env.hosts, use env.host_string instead. e.g.

def setup_db_server
  env.host_string = 'db01.yoursite.com'   # or the ip address
  run("mysqladmin ...")
end 

and running $ fab setup_db_server will execute the script on the target server.

情定在深秋 2024-11-05 22:46:47

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.

本王不退位尔等都是臣 2024-11-05 22:46:47

我有同样的问题。

我认为这是一个错误。因为今天之前所有的工作。
我将我的环境存储在 .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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文