2014-02-13 74 views
1

我試圖自動化一個系統,我們有一個linux的盒子,但自定義..去殼,我們必須通過一些輸入。像如下:在python中的ssh連接句柄pexpect

tanuj$ ssh [email protected] 
Used by Tanuj 

Password: 

command line interface 

app > en 
app # config t 
app (config) # 

我已經寫了一個腳本使用python在python。我能夠登錄並執行命令

pexpect.sendline("ls -lrt") 
pexpect.expect("#") 

,但是當我使用pexpect.before() ..越來越沒有..當命令輸出是漫長的,也是我可以看到pexpect.before也在它得到了命令。

任何想法如何解決這個問題..還是有任何其他的python模塊,我可以使用自動化ssh會話,就像我在這裏。

我也嘗試使用paramiko,但它沒有工作,因爲我們有一個執行一些命令之前,我們可以達到正常的shell提示符。

+0

在下一個提示符之前的輸出中是否會有'#'? –

+0

我也檢查過..但它不是這裏的情況。 – Tanuj

回答

1

我也面臨着類似的問題。我正要問這個問題。您正在使用#號登錄您的

pexpect.expect('#') 

此#標記註釋後面寫的所有內容。而且我想你應該創建一個子進程產卵一個過程,就像(我不知道如果我在你的情況是正確的):

child=pexpect.spawn('ssh [email protected]') 
child.expect('prompt_expected_by_you')  # put in the prompt you expect after sending SSH 
child.sendline('your_password') 
child.expect('Prompt_expected_by_you') 
child.sendline('ls -ltr') 
child.expect('Prompt_expected_by_you') 
print child.before,   # , will keep continue your newline print 
print child.after 
child.sendline('exit') 
child.expect('Prompt_expected_by_you') 
child.sendline('exit') 
child.expect('Prompt_expected_by_you') # may not be required 
child.close        # close the child session 

我已經成功地使用在FTP這些命令,但不能在SSH中打印'LS-LTR'的結果。我想我必須啓動一個shell,但不確定。任何進展都在你身邊?

有人可以幫忙?

+0

如果'#'出現在字符串中,它不會開始註釋。 –