如何在Windows操作系统的python中给出PID的运行过程?
发布时间:2020-12-14 05:36:26 所属栏目:Windows 来源:网络整理
导读:我有一个 python脚本启动一个应用程序,并抓取PID,并等待,直到使用以下不再找到该进程ID: result = subprocess.Popen( r'tasklist /fi "PID eq ' + str(PID) + '"',stdout=subprocess.PIPE,stderr=subprocess.STDOUT) 这对我来说很好,直到我尝试在XP Home上
我有一个
python脚本启动一个应用程序,并抓取PID,并等待,直到使用以下不再找到该进程ID:
result = subprocess.Popen( r'tasklist /fi "PID eq ' + str(PID) + '"',stdout=subprocess.PIPE,stderr=subprocess.STDOUT) 这对我来说很好,直到我尝试在XP Home上运行它,当然,它没有tasklist.exe 在给定进程的PID的情况下,是否存在另一种检测进程是否正在运行的方法. 简单地使用subprocess.Popen启动进程并等待它完成不是一个选项,因为必须分离进程,因为我需要在初始进程运行时执行其他任务. 有什么想法吗? 解决方法
如果您不介意安装
the Python Win32 extensions,可以使用Windows API等待进程退出,如下所示:
from win32con import SYNCHRONIZE from win32event import WaitForSingleObject,INFINITE from win32api import OpenProcess,CloseHandle process_handle = OpenProcess(SYNCHRONIZE,False,pid) try: WaitForSingleObject(process_handle,INFINITE) finally: CloseHandle(process_handle) 这将导致代码阻塞,直到进程退出(如果需要,可以更改WaitForSingleObject()值中的INFINITE;请参阅the documentation). 或者,在不安装扩展的情况下,您可以使用ctypes执行此操作,特别容易,因为所有必需的方法都在kernel32.dll中: from ctypes import windll SYNCHRONIZE = 0x100000L INFINITE = 0xFFFFFFFFL process_handle = windll.kernel32.OpenProcess(SYNCHRONIZE,1,pid) windll.kernel32.WaitForSingleObject(process_handle,INFINITE) windll.kernel32.CloseHandle(process_handle) 当然,在这种情况下,错误处理代码(省略)有点复杂,而且更少Pythonic. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-server-2008-r2 – 远程服务器:请等待系统事件通知
- Microsoft Visio professional 2013、Project professional
- windows-server-2008-r2 – Windows Server 2012可以作为Se
- win10安装ubuntu子系统配置
- windows-server-2008 – 如何在Windows 2008 R2中关闭IE的保
- windows – 一次检查所有git存储库的状态
- Win10智能客户端默认安装路径
- windows – SSDT挂钩x64系统中的替代品
- windows下安装protobuf2.6.1
- xaml – Winrt应用程序,随机场合的未处理异常