我在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")
但它没有关闭我的外部程序启动的窗口。
答案 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