我可以在Python中关闭用subprocess.Popen打开的CMD窗口吗?

时间:2017-11-29 08:32:03

标签: python cmd subprocess

我有一个程序需要在新的CMD中运行小任务。 例如:

def main()
    some code
    ...
    proc = subprocess.Popen("start.bat")
    some code...
    proc.kill()

子进程,Popen打开一个新的cmd窗口并运行" start.bat"在里面。 proc.kill()终止进程但不关闭cmd窗口。 有没有办法关闭这个cmd窗口?

我考虑过命名打开的cmd窗口,以便我可以使用以下命令将其杀死:

/taskkill /f /im cmdName.exe

有可能吗?如果没有,你有什么建议?

编辑,添加最小,完整和可验证的示例:

a.py:

import subprocess,time
proc = subprocess.Popen("c.bat",creationflags=subprocess.CREATE_NEW_CONSOLE)
time.sleep(5)
proc.kill()

b.py

while True:
    print("IN")

C.BAT

python b.py

2 个答案:

答案 0 :(得分:2)

这是另一种可以做到的方式

import subprocess
from subprocess import Popen,CREATE_NEW_CONSOLE
command ='cmd'
prog_start=Popen(command,creationflags=CREATE_NEW_CONSOLE)
pidvalue=prog_start.pid
#this will kill the invoked terminal
subprocess.Popen('taskkill /F /T /PID %i' % pidvalue)

答案 1 :(得分:1)

在子进程运行时的预期。你刚刚杀了.bat进程。

您可以使用psutil(第三方,使用pip install psutil进行安装)来计算子流程&杀了他们,像这样:

import subprocess,time,psutil
proc = subprocess.Popen("c.bat",creationflags=subprocess.CREATE_NEW_CONSOLE)
time.sleep(5)

pobj = psutil.Process(proc.pid)
# list children & kill them
for c in pobj.children(recursive=True):
    c.kill()
pobj.kill()

使用您的示例测试,窗口在5秒后关闭