15

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を実行しようとしても、同じメッセージが表示されます。私はUbuntu10.10を使用しています。助けていただければ幸いです。ところで、私はPythonの初心者です。

4

6 に答える 6

16

ホストをfabコマンドラインツールとfabfile.pyの外部のスクリプトで動作させるには、execute()を使用する必要があります

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

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

results = execute(mytask)
于 2012-08-19T08:09:33.423 に答える
15

ホストが1つしかない場合は、を使用できます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()
于 2011-05-25T14:57:17.927 に答える
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

于 2011-04-03T16:02:42.587 に答える
5

@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 すると、ターゲットサーバーでスクリプトが実行されます。

于 2012-07-08T02:42:08.443 に答える
4

Nerdatasticは正しいです。使用するホスト文字列を知るには、ファブリックのenv.host_string変数を指定する必要があります。Taskのサブクラスを使用してrun()メソッドを呼び出そうとすると、この問題が発生しました。バージョン1.3でexecutefromfabric.tasksを使用する場合を除いて、env.hostsを無視しているように見えました。

于 2011-10-19T14:50:35.143 に答える
0

私は同じ問題を抱えています。

これはバグだと思います。すべてが今日より前に機能するからです。envを.fabricrcに保存します。

今、私はあなたと同じメッセージを持っています。理由はわかりません。

于 2011-04-05T23:13:33.840 に答える