2017-07-30 48 views
0

我想使用pxssh爲NetScaler(一種基於FreeBSD的產品)製作自動升級腳本。pxssh如何發送'N'以提示「[是/否]」

我在FreeBSD上成功上傳和tar固件並進行安裝。

隨着promop「你要立即啓用?[Y/N]」,我的腳本未能sendline「否」,它

錯誤代碼爲「‘海峽’對象不是可調用的」

下面是輸出:

You can also configure this feature anytime using the command line 
interface or the configuration utility. Please see the documentation 
for further details. 

Do you want to enable it NOW? [Y/N] 
'str' object is not callable 
[[email protected] NS_Auto_Upgrade]# 

下面是我的腳本

try: 

    ssh_command = pxssh.pxssh() 
    hostname = remotename 
    username = loginname 
    password = loginpassword 
    #ssh_command.PROMPT= '> | Do you want to enable it NOW? [Y/N]'   #self-defined original prompt 
    ssh_command.PROMPT= '> '   #self-defined original prompt 
    #ssh_command.login(hostname, username, password,original_prompt='[#$>]') 
    ssh_command.login(hostname, username, password,auto_prompt_reset=False) 
    ssh_command.prompt() 
    print(ssh_command.before) 
    ssh_command.sendline('shell') # run a command 
    #print(ssh_command.before) 
    #ssh_command.PROMPT='Do you want to enable it NOW? [Y/N]'    # match the prompt 
    print(f[0:-4]) 
    ssh_command.prompt() 
    print(ssh_command.before) 
    ssh_command.sendline('mkdir /var/nsinstall/%s && ls -l /var/nsinstall' % f[0:-4]) 
    ssh_command.prompt() 
    ssh_command.sendline('tar xzvf /var/nsinstall/%s -C /var/nsinstall/%s' % (f, f[0:-4])) 
    ssh_command.prompt() 
    print(ssh_command.before) 
    ssh_command.sendline('/var/nsinstall/%s/installns' % f[0:-4]) 
    ssh_command.PROMPT='Do you want to enable it NOW? [Y/N]' 
    ssh_command.prompt() 
    print(ssh_command.before) 
    ssh_command.sendline('No') 
    ssh_command.PROMPT('Reboot NOW? [Y/N]') 
    ssh_command.prompt() 
    ssh_command.sendline('Yes') 
    #ssh_command.prompt() 
    print(ssh_command.before) 

回答

0

我不知道你的庫在所有,但我猜問題是這兩條線之間的衝突:我不知道這是正確的

ssh_command.PROMPT='Do you want to enable it NOW? [Y/N]' 
... 
ssh_command.PROMPT('Reboot NOW? [Y/N]') 

,但可能你想要麼是調用PROMPT了時間,或者分配給它兩次,不分配一次並呼叫另一個。

+0

感謝您的回覆! 第一個提示是「你想啓用...」,我需要發送線「否」,然後進程繼續前進,第二個提示「現在重新啓動」,那時候,我需要輸入「是」 Hope它可以幫助你理解 –

+0

是的,但是在一個地方,你正在做'PROMPT = ...',而在另一個地方你正在做'提示(...)'。第二個可能應該像第一個(儘管我想這可能是相反的,我根本不知道你的圖書館)。請注意,對於調試,刪除用於捕獲異常的'try' /'except'塊可能會很有用。讓程序崩潰可能會很有幫助,因爲它會向您顯示異常的追溯信息,以確切地標識它發生的位置。 – Blckknght

+0

你的意思是說,如果我之前定義了PROMPT,那會持續到函數結束。 感謝您的建議,我會嘗試刪除try/except塊。我很困惑的是,pxssh可以期待這樣的提示「現在重啓[Y/N]」 –