如何用Python调用带参数的FlashProgrammer lnk快捷方式文件
问题根因
.lnk是Windows系统的快捷方式索引文件,本身不是可执行程序,无法直接作为执行目标传入subprocess的非shell模式,这是触发OSError: [WinError 193] %1 is not a valid Win32 application错误的核心原因- 你当前的参数传递逻辑错误:将完整命令字符串作为单个参数传入,就算能执行lnk文件,参数也会被整体识别为第一个入参,执行逻辑不符合预期
解决方案
方案1:直接通过shell执行完整命令
因为你给出的命令在cmd中可以直接正常运行,开启shell=True参数让系统shell自动解析lnk指向、拆分参数即可:
import subprocess # 直接传入命令行可正常执行的完整命令 cmd = "FlashProgrammer -target=arm image.elf -device=xxxx -vdd=3V3 -erase=mass -program - secure" subprocess.run(cmd, shell=True, check=True)
方案2:显式指定lnk路径调用
如果需要指定固定的lnk文件路径,通过cmd /c前缀启动cmd进程来执行lnk即可,参数需要按规则拆分为列表:
import subprocess # 支持传入lnk的绝对路径,比如 r"C:\xxx\FlashProgrammer.lnk" flash_programmer_path = "FlashProgrammer.lnk" args = [ "-target=arm", "image.elf", "-device=xxxx", "-vdd=3V3", "-erase=mass", "-program", "-secure" ] subprocess.run(["cmd", "/c", flash_programmer_path] + args, check=True)
注意事项
- 如果lnk文件不在Python脚本的当前工作目录,需要传入lnk的绝对路径,避免文件找不到的错误
- 注意你给出的原始命令中
-program和secure之间多了空格,如果实际参数应为-secure请修正拼写,避免执行失败 check=True参数会在命令执行返回非0退出码时主动抛出异常,方便快速定位执行阶段的问题
内容的提问来源于stack exchange,提问作者unknow_user
相关产品推荐
相关产品推荐

