19

Fabricが自動的に (ユーザー対話型ではなく) シェル コマンドと対話するようにする手段を探す(パスワードの要求だけでなく、「標準入力/対話型オーバーライド」apt-get install -yが利用できない場合にユーザー入力も要求する)。

この質問とこれらのFabric docsは、FabricがFabricプログラムを実行している人間のユーザーにのみ「対話性をプッシュ」できることを示唆しています。代わりに、人間の存在なしで完全に自動化しようとしています。解決すべき「本当の」現在の問題をまだ抱えておらず、起こりうる将来の障害に備えているだけです。

Fabric がすべての stdin/prompt を自動的に排他的に処理できない場合、 pexpect (または同様の代替メカニズム) と組み合わせるとおそらく便利ですか? 「どちらか一方」のようなものである必要がないことを願っています。同じプログラム/自動化で、該当する場合は、両方 (pexpect と Fabric) を活用してみませんか?

4

3 に答える 3

19

グレンとして、私はpexpectを使用すると言います。更に、

ファブリックからのpexpect動作をスクリプト化するために作成したこのラッパーを見てください。

from ilogue.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に関する私のブログ投稿、またはpexpectを使用してファブリックでプロンプトを処理する方法も参照してください。

于 2012-04-04T08:39:29.487 に答える
15

どちらでもありません。pexpect を介して fab コマンドを実行するだけです。

child = pexpect.spawn('fab <task>')
child.expect('prompt:')
child.send('reponse to prompt')
... etc

fab コマンドは他のコマンドと同様であるため、pexpect を使用してスクリプトを作成できます。

于 2011-12-08T11:59:14.753 に答える
2

Windows ユーザーの場合は、winpexpectを使用します。このバージョンは以前のバージョンのいくつかのバグを修正しているため、リンクしたこのバージョンを必ず使用してください。

import sys, winpexpect
child = winpexpect.winspawn('ftp', ['<ftp host>'])
child.logfile = sys.stdout
child.expect('User.*:')
child.sendline('username')
child.expect('Password:')
child.direct_sendline('password')
child .sendline('ls')
print('Now enter the FTP interactive mode')
child.interact()
于 2013-11-06T22:18:15.513 に答える