-1

我正在尝试获取一个 Python 脚本来读取命令的输出,然后根据它收到的列表运行多个命令。我通常不写 VBS 或 Python,所以我被卡住了。(它很丑)

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在这种情况下)。但它并不重要。

在此处输入图像描述

我坚持的接下来的两个部分,即:

第 1 部分。如何让它发送正确的输出。正确的输出应该是:

scsi i gen X w 0 100 1 0

X此列表中的数字之一在哪里。

第 2 部分。我需要它为列表中的每个项目实际发送此命令。不是整个列表X

任何帮助表示赞赏。现在我们必须复制和粘贴列表,然后将它们 awk 到另一个列表中,然后剪切和粘贴。仅从 SecureCRT 运行它会更有益。

4

1 回答 1

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()

我能够使用 str.splitlines 来拆分每一行,然后将其添加到消息框。

于 2015-01-27T17:46:46.593 回答