You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何在外部独立终端中运行.exe可执行文件

问题说明

需要从Python脚本中启动指定exe程序,要求程序弹出独立的外部终端窗口运行,而非占用Python脚本所在的当前终端窗口。原有启动代码如下:

import subprocess
subprocess.call(["C:/Users/Alessandro/Downloads/BOSCH-GLM/BOSCH-GLM/dist/glm50.exe"])
可行解决方案(从路径判断当前运行环境为Windows系统)

该问题的本质是直接调用exe时,子进程默认继承了父进程(Python脚本)的控制台窗口,只需要在启动子进程时指定创建独立控制台即可,有两种成熟实现方式:

方法1:通过系统start命令启动

Windows自带的start命令默认会为新启动的程序分配独立终端窗口,通过cmd调用该命令启动目标程序即可:

import subprocess
exe_path = "C:/Users/Alessandro/Downloads/BOSCH-GLM/BOSCH-GLM/dist/glm50.exe"
# 注意start后的空字符串是新终端的窗口标题参数,必须保留,否则带空格、引号的路径会被误识别为窗口标题导致启动失败
subprocess.Popen(
    ["cmd.exe", "/c", "start", "", exe_path],
    shell=False
)

如果需要程序运行结束后保留终端窗口查看输出日志,可以把启动参数改成["cmd.exe", "/c", "start", "", "cmd.exe", "/k", exe_path],终端不会在程序退出后自动关闭。

方法2:通过进程创建标志指定新控制台

直接调用Windows系统的进程创建参数,给子进程分配全新的控制台窗口,不需要依赖cmd中转:

import subprocess
exe_path = "C:/Users/Alessandro/Downloads/BOSCH-GLM/BOSCH-GLM/dist/glm50.exe"
# Windows系统定义的新控制台创建标志
CREATE_NEW_CONSOLE = 0x00000010
subprocess.Popen(
    exe_path,
    creationflags=CREATE_NEW_CONSOLE
)
注意事项
  • 替换原代码里的subprocess.call为subprocess.Popen:call方法会阻塞当前Python脚本,直到启动的exe退出才会继续执行后续代码,Popen是异步启动,启动exe后Python脚本会正常往下运行,不会卡住。
  • 如果需要给目标exe传递启动参数,直接把参数按顺序追加到传入Popen的列表里即可,比如传参-p 8080就写成[exe_path, "-p", "8080"]。
  • 如果需要隐藏新终端的窗口,可以额外定义CREATE_NO_WINDOW = 0x08000000标志,和CREATE_NEW_CONSOLE做位或运算后传入creationflags参数即可。

内容的提问来源于stack exchange,提问作者Alessandro Chiodo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:33:07