13

これは、こちらの質問に関連していますが、少しひねりがあります。単に「はい」または「いいえ」を渡す代わりに、リモート シェルに任意の文字列を渡すために Fabric が必要です。

たとえば、リモート シェルが「あなたの名前は何ですか?」というプロンプトを表示した場合、次に、「最初、最後」にフィードする必要があります。

明確化:私は任意の入力を言ったことを知っていますが、実際には git pull を実行しようとしたときに SSH キー passwd プロンプトに使用しようとしていました

更新 #1: Jeff Forcier @bitprophet から応答を得ました

4

5 に答える 5

5

私はメーリングリストでこの機能の API を fabric に提案し、最終的に自分で何かを書きました:

from fexpect import expect, expecting, run 

prompts = []
prompts += expect('What is your name?','John')
prompts += expect('Where do you live?','New York')

with expecting(prompts):
    run('command')

fexpect を使用してファブリックでプロンプトを期待することに関する私のブログ投稿を参照してください

于 2012-03-08T08:48:02.603 に答える
4

リモート サーバーとの対話は、最終的に Fabric 1.0 でサポートされます。詳しくはこちらのページをご覧ください。

于 2010-09-29T13:12:03.083 に答える
2

多分pexpectを調べてください

于 2010-04-16T04:50:26.103 に答える
1

project_name/.git という名前の git オリジン リポジトリをセットアップしました。

   ssh to the server, (entering ssh passwords or passphrases as I go)
   mkdir project_name
   cd project_name
   git init
   touch fabfile.py
   git add  fabfile.py
   git commit -a -m "almost empty"
   git checkout -b web

ブランチ Web をチェックアウトしたままにします。ローカル マシンに戻ります。

クローンを介してサーバーからプルし、プロジェクト ディレクトリの内容をローカル リポジトリのブランチ マスターに追加しました。これらの手順も自動化できると思いますが、ファブリックを使用せずにセットアップするだけで、別の ssh パスフレーズは必要ありません。

   cd /path/to/project_name/..
   git clone ssh://joe@some_server.com/var/web/project_name/.git
   cd project_name
   gvim fabfile.py
   git add  fabfile.py
   git commit -a -m "fabfile edits"

今、私は布を使い始めます。以下は、git タグとブランチを管理するための私の fabfile からの抜粋です。

  #Usage: fab committag brpush  |    fab committag push   |  fab push  | fab tag
def committag():
    """commit chgs, tag new commit, push tags to server."""
    prompt('commit descr: ', 'COM_MSG', default='new stuff')
    prompt('commit name: ', 'COM_NAME', default='0.0.1')
    local('git commit -a -m "%(COM_MSG)s"' % env)
    local('sleep 1')
    local('git tag -u "John Griessen" -m "%(COM_MSG)s" %(COM_NAME)s' % env)
    local('sleep 1')
    local('git push origin --tags') #pushes local tags

def brpush():
    """create  a new branch, default COM_NAME, then push to server."""
    prompt('new branch name: ', 'BR_NAME', default= '%(COM_NAME)s'  % env)
    local('git checkout -b %(BR_NAME)s'  % env)
    local('sleep 2')
    local('git checkout master')
    local('git push origin --tags') #pushes local tags
    local('git push --all origin')  #pushes local master and branches

def push():
    """Push existing tags and changes to server."""
    local('git push origin --tags') #pushes local tags
    local('git push --all origin')  #pushes local master and branches


def tag():   #Call this from committag()
    """create  a gpg signed tag on the local git repo tag from prompted name ."""
    prompt('tag descr: ', 'TAG_MSG', default='0.0.1')
    prompt('tag name: ', 'TAG_NAME', default='0.0.1')
    local('git tag -u "John Griessen" -m "%(TAG_MSG)s" %(TAG_NAME)s' % env)

上記のfabfile定義を使用するには、プロジェクトディレクトリにいくつかの変更を加え、それらに関する適切なメッセージを考えて、次のようにします:

$fab committag

サーバー上でタグ付けされ、更新された変更があります。または:

$fab committag brpush

新しいブランチを作成し、サーバーを更新しました。

于 2010-07-13T22:13:09.130 に答える
1

ホスト検証プロンプトをスキップする 1 つの方法は次のとおりです。

run('ssh-keyscan github.com > ~/.ssh/known_hosts')

また、py-githubを使用してデプロイ キーをインストールしています。

run('ssh-keygen -q -t rsa -f /home/%(user)s/.ssh/id_rsa -N ""' % env)
key = run('cat /home/%(user)s/.ssh/id_rsa.pub' % env)
gh.repos.addDeployKey(repo, env.host, key)
于 2010-12-27T11:52:18.013 に答える