2012-08-10 141 views
1

我是Python新手(通常編碼),我正在通過WMI模塊工作。我正在尋找的是一種查詢WMI以查找爲日期過濾的事件日誌錯誤的方法。Python WMI查詢變量查詢文本

例如,如果我這樣做,它的工作原理:

events = userwmi.query("Select * from Win32_NTLogEvent where Type='error' AND TimeWritten='20120806000000.000000-000'") 

如果我這樣做:

q_text = "Select * from Win32_NTLogEvent where Type='error' AND TimeWritten='20120806000000.000000-000'" 
events = userwmi.query(q_text) 

它失敗,出現以下錯誤:

Traceback (most recent call last): 
    File "<pyshell#37>", line 1, in <module> 
    events = user.query(q_text) 
    File "C:\Python27\lib\site-packages\wmi.py", line 1009, in query 
    return [ _wmi_object (obj, instance_of, fields) for obj in self._raw_query(wql) ] 
    File "C:\Python27\lib\site-packages\win32com\client\util.py", line 84, in next 
    return _get_good_object_(self._iter_.next(), resultCLSID = self.resultCLSID) 
com_error: (-2147217385, 'OLE error 0x80041017', None, None) 

的查詢在語法上無效。我猜這是因爲,而不是傳遞文本,查詢()正在傳遞一個對象代表文本?我也嘗試了userwmi.query(wql = q_text)來明確指定正在使用的關鍵字參數。

我的目標是使用datetime模塊在運行時獲取當前日期,然後在一個月前構建一個日期字符串(如果需要,考慮前導零和年份更改),然後構造一個WQL語句,日期。現在我可以根據上面的格式構造日期,將其與查詢語句的其餘部分結合起來,並打印完整的語句。我可以手動複製該語句並將其粘貼到query()方法中併成功運行。

我在這裏有什麼希望嗎?

+0

在這兩種情況下,該方法正在傳遞一個字符串,即_same_字符串值,所以我看不到_that_可能是問題的原因。 – MRAB 2012-08-10 21:44:30

+0

感謝您的回覆。我將繼續嘗試。 – paidhima 2012-08-12 01:46:25

回答

0

我會在這裏回答我自己的問題:字符串編碼。通過構建字符串,然後將其編碼爲utf-8,一切正常。