2015-01-26 27 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。