使用python终止外部程序并关闭其所有活动窗口
我在windows平台上工作。我一直在学习使用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:是我的外部程序的输入文件 以上所有操作都很好,但我无法找到终止进程的方法,包括在这些情况下的活动窗口,而不必单击启动窗口右上角的关闭图标。 但是,如果我在命令提示符
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