在Windows上如何判断进程是否在Python中响应

2024-04-23 14:45:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个python脚本来保持有缺陷的程序打开,我需要弄清楚程序是否没有重新编码,并在windows上关闭它。我不太明白该怎么做。在


Tags: 程序脚本编码windows
2条回答

在Windows上,可以执行以下操作:

import os
def isresponding(name):
    os.system('tasklist /FI "IMAGENAME eq %s" /FI "STATUS eq running" > tmp.txt' % name)
    tmp = open('tmp.txt', 'r')
    a = tmp.readlines()
    tmp.close()
    if a[-1].split()[0] == name:
        return True
    else:
        return False

但使用PID更为可靠:

^{pr2}$

tasklist你可以得到更多的信息。要直接得到“不响应”的进程,只需在给定的函数中将“正在运行”改为“不响应”。See more info here。在

根据@Saullo GP Castro的精彩答案,这是一个使用subprocess.Popen而不是{}来避免创建临时文件的版本。在

import subprocess

def isresponding(name):
    """Check if a program (based on its name) is responding"""
    cmd = 'tasklist /FI "IMAGENAME eq %s" /FI "STATUS eq running"' % name
    status = subprocess.Popen(cmd, stdout=subprocess.PIPE).stdout.read()
    return name in str(status)

相应的PID版本为:

^{pr2}$

timeit的使用表明,subprocess.Popen的使用速度是原来的两倍(主要是因为我们不需要遍历文件):

+              -+             -+
|          Function           | Time in s (10 iterations) |
+              -+             -+
|       isresponding_os       |           8.902           |
+              -+             -+
|     isrespondingPID_os      |           8.318           |
+              -+             -+
|   isresponding_subprocess   |           4.852           |
+              -+             -+
| isresponding_PID_subprocess |           4.868           |
+              -+             -+

令人惊讶的是,如果我们使用PID,os.system实现会慢一些,但是如果使用subprocess.Popen,则差别不大。在

希望能有所帮助。在

相关问题 更多 >