2012-08-10 98 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,一切正常。