2015-01-26 31 views
-1

我想要獲取一個Python腳本來讀取命令的輸出,然後根據它收到的列表運行多個命令。我通常不寫VBS或Python,所以我陷入困境。 (它是醜陋的)分別讀取輸出和輸入每行 - Python/SecureCRT

def Main(): 
    objTab = crt.GetScriptTab() 
    objTab.Screen.Synchronous = True 
    objTab.Screen.IgnoreEscape = True 
    objTab.Screen.Send("scsi i dev select 1" + chr(13)) 
    objTab.Screen.WaitForString("============") 
    szPrompt = ">" 
    szResult = objTab.Screen.ReadString(szPrompt) 
    crt.Dialog.MessageBox(szResult) 
    crt.Screen.Send("scsi i gen" + (szResult) + "w 0 100 1 0") 

Main() 

輸入工作(儘管,我希望它會忽略了在這種情況下開始>文本(sn200028),這不是重要的是,它雖然。

enter image description here

接下來的2個部分,我被困在,即:

第1部分:如何獲得它發送正確的輸出正確的輸出應該是:

scsi i gen X w 0 100 1 0 

其中X是此列表中的一個數字。

第2部分。我需要它實際發送此命令列表中的每個項目。不是整個列表爲X

任何幫助表示讚賞。現在我們必須複製並粘貼列表,然後將它們粘貼到另一個列表中,然後剪切並粘貼它們。從SecureCRT運行它會更有益處。

+0

我不知道你正在解決什麼問題,但可能[Ansible](https://github.com/ansible/ansible)或[SaltStack](https://github.com/saltstack/鹽)是更合適的工具。如果沒有,請考慮直接使用[paramiko](https://github.com/paramiko/paramiko),而不是腳本化終端模擬器。 – 9000 2015-01-27 00:12:47

回答

0

解決

def Main(): 
    objTab = crt.GetScriptTab() 
    objTab.Screen.Synchronous = True 
    objTab.Screen.IgnoreEscape = True 
    objTab.Screen.Send("scsi i dev select 1" + chr(13)) 
    objTab.Screen.WaitForString("============") 
    objTab.Screen.Send(chr(13)) 
    szPrompt = "s" 
    szResult = objTab.Screen.ReadString(szPrompt) 
    result = crt.Dialog.MessageBox('Press OK to erase the first 100 blocks of the following devices: \n' + (szResult) , 'Run?' , ICON_QUESTION | BUTTON_YESNO | DEFBUTTON2) 
    if result == IDNO: 
     return 
    if result == IDYES: 
     vList = szResult.splitlines() 
    for strString in vList: 
     crt.Dialog.MessageBox('scsi i gen' + (strString) + ' w 0 100 1 0' + chr(13)) 

Main() 

我能夠以分割每行然後將其添加到MessageBox使用str.splitlines。