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

标签 python cmd subprocess

我有一个程序需要在新的 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/

相关文章:

python - Django:无法解析相关模型 'users.UserProfile'

python - SSL : CERTIFICATE_VERIFY_FAILED error when loading data into seaborn?

windows - 解析输出时如何纠正变量覆盖错误行为?

python runpy.run_module 退出代码

python - Mac 使用不同的 Python 版本与 virtualenv

python - 根据条件将一个数据帧列的值分配给另一数据帧列

android - 如何在安卓模拟器上安装应用程序?

vba - 使用 Excel VBA 运行 CMD 命令

python - 在 Windows 上运行带有子进程的 R 脚本,子进程似乎丢失

python - 重用子流程对象