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

为何subprocess.Popen无法从.pyw文件中正常启动应用?

.pyw文件中使用subprocess启动Chrome失败的解决方案

在Windows10+Python3.10环境下,.py格式的脚本可以通过subprocess正常启动Chrome,但改成.pyw格式后,触发快捷键时会弹出空白窗口后关闭,无法打开Chrome,也无报错信息。原代码如下:

from subprocess import Popen, STDOUT, DEVNULL

Popen([r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'], stdout=DEVNULL, stderr=STDOUT

问题原因

  1. 代码存在语法错误:最后一行缺少闭合的右括号。
  2. .pyw运行时无控制台窗口,subprocess默认的进程创建方式会尝试关联控制台,导致异常,进而无法正确启动目标程序。

修复步骤

1. 修复语法错误并添加进程创建标志

使用CREATE_NO_WINDOW标志禁止创建控制台窗口,同时添加Chrome参数确保打开新窗口:

from subprocess import Popen, STDOUT, DEVNULL, CREATE_NO_WINDOW

# 添加--new-window参数强制打开新Chrome窗口,修复语法错误并添加CREATE_NO_WINDOW标志
Popen(
    [r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', '--new-window'],
    stdout=DEVNULL,
    stderr=STDOUT,
    creationflags=CREATE_NO_WINDOW
)

2. 备选方案:使用startupinfo隐藏窗口

如果上述方案无效,可以通过STARTUPINFO设置窗口隐藏属性:

from subprocess import Popen, STDOUT, DEVNULL, STARTUPINFO, SW_HIDE, STARTF_USESHOWWINDOW

startupinfo = STARTUPINFO()
startupinfo.dwFlags |= STARTF_USESHOWWINDOW
startupinfo.wShowWindow = SW_HIDE

Popen(
    [r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe', '--new-window'],
    stdout=DEVNULL,
    stderr=STDOUT,
    startupinfo=startupinfo
)

3. 路径优化(可选)

如果Chrome已添加到系统PATH,可以直接简化启动命令:

Popen(['chrome.exe', '--new-window'], stdout=DEVNULL, stderr=STDOUT, creationflags=CREATE_NO_WINDOW)

说明

  • CREATE_NO_WINDOW是Windows平台特有的参数,用于告诉系统不要为子进程创建控制台窗口。
  • --new-window是Chrome的命令行参数,确保每次启动都打开独立的新窗口。
  • .pyw脚本运行时无控制台输出,建议先在.py模式下测试代码逻辑,确认正常后再改为.pyw格式。

内容的提问来源于stack exchange,提问作者Joe Cherveny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 15:43:22