2012-02-24 5 views
0

こんにちは私はsshのデバイス情報を読むためにPythonでpexpectを使用しています。pexpectのロジック

expObject = pexpect.spawn('/usr/bin/ssh %[email protected]%s' % (username, device)) 
expObject.sendline(password) 

私はいくつかのデバイス情報を表示した後、コマンドプロンプトで何かキーを押すと続行します。いずれかのキーを押すと情報が消えます。

は私がパスワードを与えた後に「expObject」を使用してcomtinueするために、任意のキーを押す前に表示されるデータをキャプチャしますどのようにshow version

expObject.expect(CLI_PROMPT) 
    data = expObject.before 

のようなコマンドを与えた後来て、他のデータをキャプチャするためのロジックの下に使用します。

答えて

1

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

は正確にあなたが何をしたいのための優れたガイドです。私はあなたが実際に期待を使用する必要はないと思うし、ちょうどsshのコマンド実行とsshのキーだけであなたが望むすべてを達成することができます。ここで

hostA:~ jdizzle$ ssh hostB hostname 
hostB 

は、SSHキー上の別のチュートリアルです:たとえばhttp://pkeck.myweb.uga.edu/ssh/

2

私はハンドルにラインにより、テキスト出力ラインを必要と同様の問題がありました。これを動作させるには、pexpectが*。patternに改行を含むようにregexpを設定することに注意する必要があります。したがって、*。*の代わりに[^ \ n] *を使用する必要があります。このような何かがあなたの状況で動作するはずです:

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 

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 

これは、次の出力のコマンドで動作するはずです