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

Python如何将带--标记的命令参数字符串解析为字典

实现方案

直接通过字符串分割即可实现需求,完整代码如下:

@client.command()
async def embed(ctx, *, args: str):
    # 参数解析函数
    def parse_args(args_str: str) -> dict:
        parsed = {}
        # 按--分割所有参数块,过滤空内容
        arg_blocks = [block.strip() for block in args_str.split("--") if block.strip()]
        for block in arg_blocks:
            # 仅分割第一个空格,区分参数名和参数值
            parts = block.split(maxsplit=1)
            if len(parts) == 2:
                key, value = parts
                parsed[key] = value
        return parsed

    args_dict = parse_args(args)
    # 后续生成Embed的示例逻辑
    from discord import Embed
    # 直接用解析出的字典生成Embed
    target_embed = Embed.from_dict(args_dict)
    await ctx.send(embed=target_embed)

逻辑说明

  1. 首先把传入的所有参数字符串按--分割,得到每个参数对应的内容块,过滤掉分割产生的首尾空字符串
  2. 对每个内容块,仅切割第一个空格,前面的部分就是参数名,后面的全部内容就是参数值,不需要考虑值本身带空格的情况
  3. 把所有键值对存入字典返回即可

拓展支持

如果需要支持不带值的布尔类参数,比如!embed --title Test --no-footer这类用法,可以在解析函数里增加判断:

for block in arg_blocks:
    parts = block.split(maxsplit=1)
    if len(parts) == 2:
        key, value = parts
        parsed[key] = value
    # 新增布尔参数支持,无值的参数默认赋值为True
    elif len(parts) == 1:
        parsed[parts[0]] = True

注意

当前实现不支持参数值本身包含--的场景,如果有这类需求可以额外增加引号包裹的匹配逻辑,普通使用场景下上述代码完全够用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:57:03