[转载] python在子线程中使用WMI报错
2016-10-08 11:22
316 查看
本文转载自: http://www.68idc.cn/help/jiabenmake/python/20150123184163.html
我在一个python脚本中用到了WMI,用于确保杀死超时却未能自己结束的进程 (已经先尝试了Ctrl+Break中止)。
测试代码运行正常,但当我把这个函数放在子线程中使用时,却发现报错:
com_error: (-2147221020, 'Invalid syntax', None, None)
后来在网上检索,发现必须添加初始化函数和去初始化函数,所以在一个子线程中可使用的函数代码类似于:
一旦上述aaa.exe,bbb.exe,ccc.exe进程运行超过timeout秒,即会被强制结束。
参考链接:
http://bytes.com/topic/python/answers/608938-importing-wmi-child-thread-throws-error
我在一个python脚本中用到了WMI,用于确保杀死超时却未能自己结束的进程 (已经先尝试了Ctrl+Break中止)。
测试代码运行正常,但当我把这个函数放在子线程中使用时,却发现报错:
com_error: (-2147221020, 'Invalid syntax', None, None)
后来在网上检索,发现必须添加初始化函数和去初始化函数,所以在一个子线程中可使用的函数代码类似于:
import win32com.client import pythoncom import subprocess import logging def task_kill_timeout(timeout): pythoncom.CoInitialize() WMI = win32com.client.GetObject('winmgmts:') all_process = WMI.ExecQuery('SELECT * FROM Win32_Process where Name="aaa.exe" or Name="bbb.exe" or Name="ccc.exe"') for process in all_process: t = process.CreationDate t = t[:t.find('.')] start_time = time.strptime(str(t), '%Y%m%d%H%M%S' ) time_passed_by = time.time() - time.mktime(start_time) if time_passed_by > timeout: logging.error( 'Run taskkill %s' % process.name) print 'Run taskkill %s' % process.name subprocess.Popen('taskkill /F /pid %s' % process.processid, stderr=subprocess.PIPE, stdout=subprocess.PIPE, ) time.sleep(1.0) pythoncom.CoUninitialize ()
一旦上述aaa.exe,bbb.exe,ccc.exe进程运行超过timeout秒,即会被强制结束。
参考链接:
http://bytes.com/topic/python/answers/608938-importing-wmi-child-thread-throws-error
相关文章推荐
- 分享:【转载】Python中使用线程的技巧
- 使用python测测你的系统最多能创建多少个线程
- python框架之django使用系列教程(1),原创,转载请注明出处
- Python中队列和线程的使用
- 使用PyInstaller2将Python脚本转化为可执行文件(上-安装部分)(转载自博客园balian)
- 使用PyInstaller2将Python脚本转化为可执行文件(中-使用部分)(转载自博客园balian)
- 使用PyInstaller2将Python脚本转化为可执行文件(下-进阶使用)(转载自博客园balian)
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- Python:使用threading模块实现多线程编程二[两种方式起线程]
- Python:使用threading模块实现多线程编程八[使用Event实现线程间通信]
- (转载)Linux系统中分离线程的使用
- 使用Python抓取网页图片[转载]
- 在python中使用OpenCV【转载的】【不好用或过时了】
- (转载)在Android中使用Handler和Thread线程执行后台操作
- python中线程的使用
- Python线程使用指南
- Python多线程学习(一、线程的使用)
- Python多线程学习(一、线程的使用)
- Python多线程学习(一、线程的使用)
- 使用 Python 进行线程编程 线程的使用模式