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

使用python终止外部程序并关闭其所有活动窗口,python,windows,subprocess,terminate,taskkill,Python,Windows,Subprocess,Terminate,Taskkill,我在windows平台上工作。我一直在学习使用python启动外部进程的不同方法。用我自己的例子,我可以: os.system("C:\mainfolder\menu.exe C:\others\file1.inp C:\others\file2.inp") 或 或 其中: menu.exe:是我的外部程序 file1和file2:是我的外部程序的输入文件 以上所有操作都很好,但我无法找到终止进程的方法,包括在这些情况下的活动窗口,而不必单击启动窗口右上角的关闭图标。 但是,如果我在命令提示符

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

os.system("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") 

但它不会关闭外部程序启动的窗口。

保留一个列表,列出您启动的任务的所有进程id(
PID
),然后向它们发送终止信号


顺便说一句-小心使用-如果您启动的流程已经完成,它的PID可能已被不属于您的东西重复使用

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

像这样尝试:使用
子流程

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

程序自行完成,但它会使启动的窗口保持打开状态。我不知道该怎么做,当我从命令行关闭它时,它说:suces:向进程“menu.exe”发送终止信号,PID 4512。如何从python发送该命令?我尝试了:child=subprocess.Popen(['C:\mainfolder\menu.exe','C:\others\file1.inp','C:\others\file2.inp'],stdout=subprocess.PIPE)启动我的程序,subprocess.Popen.terminate(child)终止。但是窗口还没有关闭,加上我得到和访问被拒绝错误我已经尝试了这段代码,但我仍然需要手动关闭启动的窗口。手动关闭窗口后,将执行child.communicate()和child.kill()。如果我没有按下窗口的关闭图标,我的脚本将无法继续。这里的问题在哪里?。尝试此
import os
然后
os.kill(child.pid,9)
我认为系统不知道我的进程已经完成,这就是为什么它不响应任何os.kill或child.kill()或subprocess.terminate()命令的原因。
    os.system("taskkill /im menu.exe") 
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