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

Windows系统下如何正确使用subprocess.run配置路径?

解决Windows下Python subprocess.run找不到可执行文件的问题

你遇到的FileNotFoundError不是路径格式的问题——不管用不用r前缀,你的路径写法都是合法的。核心原因是subprocess.run的执行逻辑:cwd参数仅设置子进程的工作目录,不会让系统自动在该目录下搜索可执行文件。

下面是几种可行的解决方法:

方法一:指定可执行文件的完整路径

把工作目录和可执行文件名拼接成完整路径,直接作为subprocess.run的执行命令:

import os
import subprocess

# 目标程序所在目录
target_dir = r"C:/Program Files (x86)/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin"
# 替换为实际的可执行文件名
exe_filename = "STM32CubeProgrammer.exe"
# 拼接完整路径
full_exe_path = os.path.join(target_dir, exe_filename)

# 执行命令,cwd可选,用于设置子进程的工作目录
result = subprocess.run(full_exe_path, cwd=target_dir)

方法二:临时将目标目录加入系统PATH

如果不想写完整路径,可以把目标目录临时添加到当前Python进程的PATH环境变量中,让系统能自动找到可执行文件:

import os
import subprocess

target_dir = r"C:/Program Files (x86)/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin"
# 将目标目录追加到PATH末尾,os.pathsep是系统路径分隔符(Windows下为;)
os.environ["PATH"] += os.pathsep + target_dir

# 直接用可执行文件名执行
result = subprocess.run("STM32CubeProgrammer.exe")

这种修改仅对当前Python进程有效,不会改变系统全局的PATH设置。

方法三:使用shell=True(谨慎使用)

当设置shell=True时,Windows会通过cmd.exe执行命令,此时会在cwd指定的工作目录下搜索可执行文件:

import subprocess

target_dir = r"C:/Program Files (x86)/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin"
result = subprocess.run("STM32CubeProgrammer.exe", cwd=target_dir, shell=True)

⚠️ 注意:如果command包含用户输入的内容,shell=True可能导致命令注入攻击,非必要情况下不推荐使用。

补充说明

你之前用斜杠路径处理其他Windows路径正常,是因为那些场景(比如open()打开文件)是直接通过给定路径定位文件;而subprocess.run处理字符串形式的command时,会遵循系统的可执行文件搜索规则(优先查找PATH环境变量中的目录),两者的逻辑完全不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:47:33