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

使用subprocess.Popen调用JLinkExe时参数不被识别的问题

问题原因及解决方法

核心问题

你用subprocess.Popen传参时犯了一个常见错误:把多个命令行参数合并成了单个字符串元素。

在终端执行sudo JLinkExe -nogui 1时,shell会自动把空格作为分隔符,将-nogui和1识别为两个独立的参数传递给JLinkExe。但用subprocess.Popen的列表形式传参时,列表里的每个元素都会被直接当作一个完整的参数传给程序,不会再做分割处理。

所以当你写["JLinkExe", "-nogui 1"]时,JLinkExe会把-nogui 1当成一个整体的命令行选项,自然识别不了,就会抛出"Unknown command line option -nogui 1."的错误。同理,传空字符串""时,这个空字符串会被当作一个无效参数,导致提示"Unknown command line option ."。

正确写法

把每个参数拆分成列表的独立元素:

import subprocess

def flash() -> None:
    p = subprocess.Popen(
        ["JLinkExe", "-nogui", "1"],  # 将-nogui和1拆分为两个独立元素
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        universal_newlines=True,
        text=True
    )
    response = p.stdout.read()
    print(response)

补充说明

如果非要用合并的字符串形式传参,可以开启shell模式(不推荐,存在命令注入安全风险),此时subprocess会调用shell解析参数:

p = subprocess.Popen(
    "JLinkExe -nogui 1",
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    universal_newlines=True,
    text=True,
    shell=True  # 开启shell模式
)

但这种方式在处理外部输入时风险较高,优先推荐拆分参数的列表形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:09:56