0

こんにちは私はPythonでpexpectを使用してsshデバイス情報を読み取っています。

expObject = pexpect.spawn('/usr/bin/ssh %s@%s' % (username, device))
expObject.sendline(password)

パスワードを入力した後、いくつかのデバイス情報を表示しました。コマンドプロンプトで、続行するには任意のキーを押すように求められます。いずれかのキーを押すと、情報が消えます。

私は以下のロジックを使用して、次のようなコマンドを実行した後に来る他のデータをキャプチャしますshow version

    expObject.expect(CLI_PROMPT)
    data = expObject.before

では、パスワードを入力した後、任意のキーを押して「expObject」を使用して続行する前に表示されるデータをキャプチャするにはどうすればよいですか。

4

2 に答える 2

2

テキスト出力を1行ずつ処理する必要がある同様の問題がありました。これを機能させるには、.* パターンに改行が含まれるように pexpect が正規表現を構成することに注意する必要があります。そのため、.* の代わりに [^\n]* を使用する必要があります。あなたの状況では、このようなものがうまくいくはずです:

child = pexpect.spawn('ssh command goes here')
child.expect('password prompt text\r\n')
child.sendline(password)
data = ""
while True:
    i = child.expect(['press any key to continue', '[^\n]*\r\n'])
    if i == 0:
        break
    data += child.before
print data

これは、次を出力するコマンドで機能するはずです。

password propt text
<start of data captured> - 1st line
a second line
a third line
last line <end of data that will be captured>
press any key to continue
于 2012-03-19T22:33:34.760 に答える
1

http://ubuntuforums.org/showthread.php?t=220139

まさにあなたがやりたいことのための優れたガイドです。実際にはexpectを使用する必要はなく、sshコマンドの実行とsshキーだけで必要なすべてを達成できると思います. 例えば:

hostA:~ jdizzle$ ssh hostB hostname
hostB

これは、ssh キーに関する別のチュートリアルです: http://pkeck.myweb.uga.edu/ssh/

于 2012-02-26T05:01:34.690 に答える