使用子进程挂起调用tasklist / m

时间:2018-04-13 22:12:31

标签: python python-2.7 tasklist

这是一些我无法解释的好奇心。请考虑以下代码段:

import subprocess

command = ['tasklist.exe', '/m', 'imm32.dll']
p = subprocess.Popen(command, stdout=subprocess.PIPE)
out, err = p.communicate()

communicate()的调用挂了,我不得不用 Ctrl + C 突破。之后,任务列表进程仍在运行,我必须使用taskkill.exe将其杀死。请查看下表中tasklist.exe的行为:

| Command                             | Behavior |
|-------------------------------------|----------|
| ['tasklist.exe', '/m', 'imm32.dll'] | Hung     |
| ['tasklist.exe', '/m']              | Hung     |
| ['tasklist.exe']                    | OK       |

似乎存在/m标志时,进程不会返回。它只是永远运行。我也试过以下内容并且还挂了:

os.system('tasklist.exe /m imm32.dll')

如何启动此命令而不挂起?

更新

事实证明,communicate调用没有挂起,但需要花费10分钟才能完成,如果我从cmd.exe提示符运行命令,则会花费几秒钟。我相信这与缓冲有关,但还没有办法让它更快完成。

0 个答案:

没有答案