2

wmi python モジュールを使用して、特定のプログラムの IP アドレス (ips.txt) のリストをチェックする python スクリプトを作成中または作成しようとしています。ただし、RPC サービスを実行していない資産の例外をどのように処理しても、スクリプトはエラーで実行を停止します。私はpython 2.7.5を使用しています

エラーをキャッチして渡すことはできますか? エラーをキャッチして、IP が生きていない、または rpc が実行されていないというメモを出力または返すことはできますか?

前もって感謝します

これが私のコードです:

import wmi
list = open("ips.txt")

for line in list.readlines():
    asset = line.strip('\n')
    c = wmi.WMI(asset)
    try:
        for process in c.Win32_Process (name="SbClientManager.exe"):
            print asset, process.ProcessId, process.Name
    except Exception:
        pass

リストの解析を続行するために複数の方法で例外を処理しようとしましたが、スクリプトは次のエラーを出し続けます。

    Traceback (most recent call last):
  File ".\check_service.py", line 12, in <module>
    c = wmi.WMI(asset)
  File "C:\Python27\lib\site-packages\wmi.py", line 1290, in connect
    handle_com_error ()
  File "C:\Python27\lib\site-packages\wmi.py", line 241, in handle_com_error
    raise klass (com_error=err)
wmi.x_wmi: <x_wmi: Unexpected COM Error (-2147023174, 'The RPC server is unavailable.', None, None)>

最終的には、スクリプトを続行してエラーをキャッチしようとしています。おそらく、IP が応答しなかったというメモが役立つでしょう。私が試した例外のサンプルは次のとおりです。

except Exception:
    sys.exc_clear()

except:
    pass

except wmi.x_wmi, x:
    pass
4

1 に答える 1

3

貼り付けたトレースバックは、エラーがc = wmi.WMI(asset)行にあることを示しています。tryその行をブロック内に配置する必要があります。

そのようです:

import wmi
list = open("ips.txt")
bad_assets = []

for line in list.readlines():
    asset = line.strip('\n')
    try:
        c = wmi.WMI(asset)
        for process in c.Win32_Process (name="SbClientManager.exe"):
            print asset, process.ProcessId, process.Name
    except Exception:
        bad_assets.append(asset)

また、適切な例外をキャッチしようとすることをお勧めします。

于 2013-09-11T17:55:16.953 に答える