1

多数のシステム、特にスイッチと対話するアプリケーションを作成しています。

Fabric (python) を使用して特定のスイッチからログを取得できる機能を実装しようとしています。

スイッチへの実際のセッションでは、最初に「有効化」を実行し (Enter キーを押して)、次に「debug generate dump」コマンドを実行する必要があります。

fabric.operations.run() を使用すると、一度に 1 つのコマンドしか発行できません。出力を解析し、終了したら接続を閉じる必要があるため、fabric.operations.open_shell() を使用することはオプションではありません。

誰かがこれを手伝ってくれますか? ありがとう!!

コードの例を次に示します。

def getSwitchLog(self, host, port, username, password):
        env.host_string = "%s:%s" % (host, port)
        env.user = username
        env.password = password
        command = 'enable \r debug generate dump'
        run(command, shell=cli, pty=True, combine_stderr=True, timeout=120)
  • shell=cli - スイッチは bash を実行せず、この場合は「cli」が適切な値であるため

  • \r 基本的に「enter」キーを送信する必要があり、1. enable 2. enter 3. debug generate dump を送信します。

  • このメソッドは、open_shell で run を切り替えた場合に機能しますが、run は \r を無視するようです

私は必要なものを達成することができました:

command = 'sshpass -p admin ssh admin@switchIP cli \"enable\" \"show version\"'
fabric.api.local(command, capture=True, shell=None)

ただし、この方法は fabric.api.run() ほど堅牢ではなく、実行中のノードに sshpass をインストールする必要もあります。

これは、コマンドがファブリックなしで対話的に (キーボードから) 入力されたときのスイッチ CLI からの出力の例です。

[standalone: master] > enable
[standalone: master] # debug generate dump
[standalone: master] # debug generate dump Generated dump sysdump-SX6036-1-20130630-104051.tgz
[standalone: master] #

ありがとう。

4

2 に答える 2