我有一个程序需要在新的 CMD 中运行小任务。 例如:
def main()
some code
...
proc = subprocess.Popen("start.bat")
some code...
proc.kill()
subprocess,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
最佳答案
当子进程运行时这是预期的。您只是终止了 .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 秒后关闭
关于python - 我可以关闭在 Python 中使用 subprocess.Popen 打开的 CMD 窗口吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47548242/