-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この場合)。ただし、それは重要ではありません。

ここに画像の説明を入力

私が立ち往生している次の2つの部分、つまり:

パート 1. 正しい出力を送信する方法。正しい出力は次のようになります。

scsi i gen X w 0 100 1 0

X、このリストの数字の 1 つです。

パート 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 に答える