终止外部程序并使用python关闭其所有活动窗口

时间:2014-11-06 21:12:08

标签: python windows subprocess terminate taskkill

我在Windows平台上工作。我一直在学习使用python启动外部进程的不同方法。使用我自己的例子,我可以:

os.system("C:\mainfolder\menu.exe C:\others\file1.inp C:\others\file2.inp")

os.popen("C:\mainfolder\menu.exe C:\others\file1.inp C:\others\file2.inp")

subprocess.call(["C:\mainfolder\menu.exe","C:\others\file1.inp" "C:\others\file2.inp"])

其中:

menu.exe:是我的外部程序。

file1和file2:是我外部程序的输入文件。

以上所有工作都完美无缺,但我无法找到终止进程的方法,包括其中任何一种情况的活动窗口,而无需单击已启动窗口右上角的关闭图标。 但是,如果我在命令提示符下键入taskkill / im menu.exe,我会管理我要查找的内容。

有没有办法使用python获得相同的东西?只是寻找简单的东西,因为我不太了解Python。

我尝试过:

    os.system("taskkill /im menu.exe") 

但它没有关闭我的外部程序启动的窗口。

3 个答案:

答案 0 :(得分:1)

尝试从子进程模块中实例化Popen对象,而不是使用subprocess.call()包装器。它的工作方式与call()的工作方式相同,但您可以从操作系统中获取包含低级进程处理程序的对象。这个包装器有一个名为terminate的方法,它应该做你想要的。

答案 1 :(得分:0)

保留您开始的任务的所有进程ID,(PID)的列表,然后向他们发送终止信号。

BTW - 谨慎使用 - 如果您启动的流程已经完成,那么PID可能已经被不属于您的东西重用了! / em>的

答案 2 :(得分:0)

尝试这样:使用subprocess

import subprocess
child = subprocess.Popen(['commad','arg1,'arg2'....],stdout=subprocess.PIPE)
output = child.communicate()   # will give you (stdoutdata,stderrdata)
# if you want to kill this process
child.kill() # sends SIGKILL signal