Python在没有shell的情况下杀死进程

时间:2016-01-11 22:57:48

标签: python python-2.7 process subprocess kill

我正在制作一个程序,在Windows 10上为我做一些流程管理。

为了杀死不需要的进程,我使用以下命令:

import subprocess
subprocess.Popen("taskkill /F /im "+unwantedProcess, shell=True, stdout=subprocess.PIPE)

其中不需要的进程是我想要杀死的进程的全名。我也尝试过使用:

os.system("taskkill /F /im "+unwantedProcess)

现在,当使用pyinstaller进行解释或编译时,此工作正常。当我使用

时出现问题
--noconsole
pyinstaller中的

命令。它适用于所有其他实例,除非没有控制台(因为我不想在后台打开控制台)。知道如何解决这个问题吗?

编辑:编辑代码后,我插入了一个非常基本的错误捕获语句,如下所示:

try:
    subprocess.Popen("taskkill /F /im skype.exe", shell=True, stdout=subprocess.PIPE)
except Exception as e:
    f = open("error.txt", "w")
    f.write(str(e))
    f.close()

使用skype作为示例进程来杀死。当用控制台解释或编译程序时,它仍然成功地将其杀死。但是,当它使用

编译时
--noconsole
再次

命令我在错误文件中得到了这个输出:

[Error 6] The handle is invalid
当我运行这个程序时,Skype肯定是开放的

1 个答案:

答案 0 :(得分:1)

您使用--no-console选项调用python的事实使您的进程不适合控制台I / O(即您需要调用taskkill)。

如果您确实想隐藏控制台并且仍然拥有有效的流程句柄,则可以采用不同的方法。查看this question

的答案